Newsgroup: it.comp.lang.delphi
Titolo: Leggere contenuto celle Foglio Excel

Salve a tutti.
Vorrei sapere se è possibile , tramite DDE, leggere il contenuto delle 
celle 
di un foglio Excel.
Vi spiego il mio problema: ho un foglio di Excel compilato 
automaticamente 
da un'altro software.
La mia intenzione sarebbe quella di fare un piccolo programmino che , con 
l'ausilio di DDE, vada a leggere il contenuto di alcune celle del 
suddetto 
foglio e ne possa elaborare il valore.
Ho consultato la documentazione e ho capito che devo utilizzare il 
componente TDdeClientConv con il metodo SetLink per aprire la 
connessione, 
con il metodo RequestData per leggere il valore.
Non ho capito però come devono essere impostati i parametri.
Qualcuno ha esperienza al riguardo?
Secondo voi ci sono modi miglori per fare questo, e quali?
Qualcuno mi avrebbe consigliato ADO o COM, senza darmi alcun dettaglio.
Sareste in grado di darmi delle dritte, anche magari con qualche esempio.
Grazie di cuore.
Umberto Antonazzi
--- posted by geoForum on 
http://www.delphiedintorni.it

UmbertoAntonazzi ha scritto:

Ciao,
   hai varie alternative e la scelta dipende da quello che devi fare 
nello specifico. Alcune considerazioni:
1) ADO e' utile nel caso in cui tu non abbia Excel installato nel PC in 
cui il programma esegue: in questo caso, infatti, non viene 
automatizzato Excel, ma viene sfruttato il motore Jet che tratta il 
foglio Excel che tu specifichi, come una matrice di dati (una tabella, 
leggi un dataset) e ti permette di leggere e scrivere i valori. Per te 
e'trasparente che il back-end sia un foglio Excel: avrai a disposizione 
un TADODataset;
2) Ole Automation: nella palette dei componenti troverai (piu' o meno in 
fondo a destra) una "tab" con nome "Servers".
Tra questi trovi tutti i componenti design/run-time utili ad 
automatizzare applicazioni Microsoft Office. Come utilizzarli?
http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_20780602.html
HTH.
Ciao,
baba.

baba.
Umberto


UmbertoAntonazzi ha scritto:

1)	Con ADO ti basta semplicemente disporre un componente TADOQuery (per 
esempio) sulla form/datamodule etc. Dopodiche' devi predisporre una 
stringa di connessione per il fogli Excel contenente i dati. Immagina 
che il file Excel si chiami "pippo.xls":
	'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\pippo.xls;Extended 
Properties=Excel 8.0;'
e dovrai assegnarla alla proprieta' ".ConnectionString" del componente 
TADOQuery.
La query con cui estrarre i dati, assumendo che il foglio su cui si 
trovano i dati (matrice con i nomi campo nelle celle della prima riga e 
i valori nelle celle sottostanti) si chiami "FOGLIO1", sara':
	'select * from [FOGLIO1$]'
e dovrai assegnarla alla proprieta' ".SQL.Text" del componente TADOQuery.
Fatto. Adesso hai un TADODataset che, una volta aperto(".Open") espone i 
dati contenuti in un foglio dati Excel, ti permette di leggerli e 
modificarli (con qualche limitazione, leggi l'help on line su Jet), 
senza avere Excel installato.
2)	nel post precedente ho inserito un link, mi dispiace ma adesso non 
riesco a scriverti del codice. Ti chiedo gentilmente di rifarti al 
collegamento che ti ho segnalato:
 
http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_20780602.html
 
Ciao,
baba.

 consultare, oppure due righe di codice.
Mi scuso, non avevo capito il senso del pagare. Nella pagina che ti ho 
segnalato c'e' la soluzione, e non devi pagare.
Scorri la pagina in basso e troverai vari esempi che ti chiariranno i 
dubbi.
Ripeto comunque che cercando con Google trovi molte altre soluzioni.
Ciao,
baba.

 consultare, oppure due righe di codice.
Gratuitamente puoi scaricarti da sourceforge OfficePartner, ha dentro tutto
quello che cerchi, manuale e demo da compilare compresi. Opensource di
qualità.
Ciao
-- 
Morde. 
ICLDweb: 
http://www2.samatel.com/icld/

baba.
Ciao


 
Ciao,
   non so dirti perche', in questo caso, non venga rilasciata la memoria 
allocata... mi sembra pero' alquanto strano.
Al momento la cosa piu' giusta da fare mi sembra controllare il codice 
sorgente... Prova a postarne un pezzo *significativo* che ci aiuti a capire.
Ciao,
baba.

sorgente... Prova a postarne un pezzo *significativo* che ci aiuti a 
capire.
Questa č la routine che uso per leggere il foglio excel.
Tieni conto che al componente TADOQuery non ho modificato nulla se non la 
ConnectionString.
      with ADOQuery1 do
      begin
         Close;
         SQL.Clear;
         SQL.Add('Select * From [Foglio1$] Where Codice = :Codice');
         Parameters.ParamByName('Codice').Value := sCodice;
         Open;
         Result := not Eof;
      end;
Ciao,


Volevo solo comunicare che i tuoi consigli mi hanno portato alla 
soluzione del mio caso e per questo volevo ringraziarti.
Ho adottato la soluzione dall'ADOQuery e per risolvere i problemi di 
occupazione di memoria leggo tutte le righe della cartella excel senza 
fare letture con la condizione Where.
Grazie ancora di tutto.
