Newsgroup: it.comp.lang.delphi
Titolo: [delphi xe3]: ole excel con metodi non supportati

Salve a tutti.
Ho provato ad utilizzare il codice presente a questo indirizzo
microsoft
 
http://support.microsoft.com/kb/231614
 
 
per poter lavorare da delphi su un foglio excel.
 
L'istruzione
 
oRng.NumberFormat := '$0.00';
 
però mi restituisce questo errore:
 
"Impossibile impostare la proprietà NumberFormat per la classe range".
 
Leggo sull'articolo che il codice postato va bene per excel 97,
2000,2002.
 
Sul pc dove dovraì funzionare il programma è installato excel 2010 con
win7 pro. Può essere questo il motivo ? E se si come posso risolvere ?
 
Grazie

Sei OT.
Quello è un problema che prescinde delphi.
E' relativo a VBA.
 
A.


Ciao. Sei sicuro ?
Il codice in VBA funziona. 
E' delphi che non riconosce SOLO il metodo numberformat mentre riconosce tutti gli altri (font, size, ecc, ecc) ... proprio non capisco ....

 E' delphi che non riconosce SOLO il metodo numberformat
 
Evidentemente non mi sonio spiegato.. Ci riprovo.
Delphi NON CONOSCE NEINET DI VBA.
Si limita a prendere i comandi e passarli al server OLE di turno.
 
A.

 E' delphi che non riconosce SOLO il metodo numberformat mentre riconosce tutti gli altri (font, size, ecc, ecc) ... proprio non capisco ....
 
Prova a postare tutta la sezione di codice che contiene anche la parte che va in errore, per capire come hai usato gli oggetti, come li hai valorizzati e così via.
 
Ciao,
  Marco.
 
-- 
MARCO BREVEGLIERI 
#Home: 
http://www.marco.breveglieri.name
 
#Blog: 
http://www.compilaquindiva.net
 


Ok. Ecco il codice:
 
procedure TForm3.Elabora1Click(Sender: TObject);
//var
 
begin
 
  if verifica_ok = true then
    begin
  try
    Ex := createoleobject('Excel.Application');
  except
    on E : Exception do
      begin
        MessageDlg('Errore nella creazione dell''istanza Microsoft Excel.', mtError, [mbOK], 0);
       exit;
      end;
  end;
Ex.visible := vedi_ex;
// provo ad aprire excel
  try
   Ex.workbooks.open(L_vi.Caption);
  except
    on E : Exception do
      begin
        MessageDlg('Errore nell''apertura del file '+ L_vispi.caption , mtError, [mbOK], 0);
        Exit;
      end;
  end;
 
end;
 
if cbox3.Checked = true then comp3;
 
ex.displayalerts := false;
ex.save;
ex.workbooks.close;
 
showmessage('Compilazione terminata');
 
end;
 
 
// compila il foglio3
procedure TForm3.comp3;
var
  rigatesto : TextFile;
  buffer : string;
  filedacercare : string;
  ctrrig : string;
  xc, ri3, riga : integer;
  importo : Extended;
  imp : string;
  xe : olevariant;
 
begin
 
   Ex.workbooks.open(L_vi.Caption);
   Ex.Workbooks[1].Worksheets['Foglio3'].select;
  ri3 := 0;
  riga := 10;
  filedacercare := '';
  filedacercare := (Trim(L_cartab.caption)) + '\' + (Trim(tab_3.text)+ '.TXT');
   if FileExists(Trim(filedacercare)) = true then
     begin
      AssignFile(rigatesto, filedacercare);
      Reset(rigatesto);
        while not EOF(rigatesto) do begin
         ri3:=ri3+1;
         application.ProcessMessages;
         Isp3pr.Text := inttostr(xc);
         ReadLn(rigatesto, buffer);
          If (ri3 >= rig3in) And (ri3 <= rig3fi) Then
           begin
           // finito
            If (pos('Riepilogo', buffer) <> 0) Then
             begin
             s_3.Text := 'Compilato';
             exit;
             End;
 
           // E' una riga con assegno
             if (pos('test', buffer) <> 0) and (pos('test1', buffer) = 0) Then
              begin
               riga := riga + 1;
              // data carico
              If Length(Trim(copy(buffer, 81, 8))) <> 0 Then
               begin
                ex.Cells[riga, 1].Font.Size := 9;
                ex.Cells[riga, 1].HorizontalAlignment := xlRight;
                ex.Cells[riga, 1].NumberFormat := 'DD/MM/YY';
                ex.Cells[riga, 1].Value := StrToDate(copy(buffer, 81, 8));
               end;
              end;
           end;
        end;
   end;
 
CloseFile(rigatesto);
end;
end;
 
Questo e' un estratto del codice ma come dicevo il problema sta proprio nella riga  
 
ex.Cells[riga, 1].NumberFormat := 'DD/MM/YY';
 
Grazie in anticipo.

Stai andato via late binding. Quindi, come già detto:
 
1) DELPHI NON CONOSCE QUESTE COSE
Si becca quello che gli scrivi e lo passa all'istanza OLE
 
2) Delphi non c'entra
E' EXCEL quello che ti sta rompendo le palle.
 
L'unica cosa che mi viene in mente è provare a togliere il separatore, usando quindi YYYYMMDD e vedere cosa succede.
 
 
A.

Aggiungo una cosa:
 
  try
    Ex := createoleobject('Excel.Application');
  except
    on E : Exception do
      begin
        MessageDlg('Errore nella creazione dell''istanza Microsoft Excel.'..
       exit;
      end;
  end;
 
E bena abituarsi a non nascondere MAI i messaggi delle eccezioni.
Murphy insegna che in un qualsiasi software l'informazione piu' importante è l'errore.
 
 
A.

Il giorno domenica 14 aprile 2013 10:38:47 UTC+2, kar ha scritto:

E bena abituarsi a non nascondere MAI i messaggi delle eccezioni.
Murphy insegna che in un qualsiasi software l'informazione piu' importante è l'errore. 
 
Puoi spiegarmi meglio ? Ho appena iniziato con delphi e mi sfugge tanto ....
 
Grazie

 
Questo codice è SBAGLIATO in quanto PERDI il messaggio dell'eccezione:
 
try
    Ex := createoleobject('Excel.Application');
  except
    on E : Exception do
      begin
        MessageDlg('Errore nella creazione dell''istanza Microsoft Excel.'..
       exit;
      end;
  end; 
 
 
 
Questo  codice è corretto in quanto mostra si che qualcosa è andato ai festini del nano di arcore, ma ti dice anche esattamente COSA E' SUCCESSO.
Cioe: classe della eccezione e messaggio della eccezione:
 
var
  Msg: string;
 
try
    Ex := createoleobject('Excel.Application');
  except
    on E : Exception do
      begin
              // IL MSG SI PORTA DIETRO LE INFO SULL'ERRORE!
 
        Msg := Format('errore in creazione istanza excel: %s %s', [
            E.ClassName,
            E.Message]);
        MessageDlg(Msg....
 
       exit;
      end;
  end; 
 
 
A.

Il giorno domenica 14 aprile 2013 10:38:47 UTC+2, kar ha scritto:

Grazie.