Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[delphi xe3]: ole excel con metodi non supportati

111 views
Skip to first unread message

kar

unread,
Apr 14, 2013, 4:38:47 AM4/14/13
to
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

Alberto Salvati

unread,
Apr 14, 2013, 11:30:14 AM4/14/13
to
Sei OT.
Quello è un problema che prescinde delphi.
E' relativo a VBA.

A.

kar...@gmail.com

unread,
Apr 14, 2013, 11:53:11 AM4/14/13
to
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 ....

Alberto Salvati

unread,
Apr 15, 2013, 3:36:25 AM4/15/13
to
> Ciao. Sei sicuro ?


Abbastanza.

>
> Il codice in VBA funziona.


Posta il codice che usi in delphi e vediamo.

> 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.

Marco Breveglieri

unread,
Apr 15, 2013, 5:26:58 AM4/15/13
to
Il giorno domenica 14 aprile 2013 17:53:11 UTC+2, kar...@gmail.com ha scritto:
> 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 ....

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

kar...@gmail.com

unread,
Apr 15, 2013, 3:44:20 PM4/15/13
to
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.

Alberto Salvati

unread,
Apr 16, 2013, 3:02:53 AM4/16/13
to
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.

Alberto Salvati

unread,
Apr 16, 2013, 3:07:15 AM4/16/13
to
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.

kar...@gmail.com

unread,
Apr 16, 2013, 4:05:45 PM4/16/13
to
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

Alberto Salvati

unread,
Apr 17, 2013, 2:52:10 AM4/17/13
to

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.

kar...@gmail.com

unread,
Apr 17, 2013, 8:06:47 AM4/17/13
to
Il giorno domenica 14 aprile 2013 10:38:47 UTC+2, kar ha scritto:
Grazie.
0 new messages