PDA

Visualizza la versione completa : [DELPHI] Leggere un file Excel


idra46
12-07-2005, 15:19
Salve,
sono riuscito a leggere la tabella da Excel, se nel foglio é contenuta solo la tabella, se in alto prima della tabella c'é scritto qualcosa o c'é un'immagine, non riesco + a leggere.
Ho letto su internet che si puo' dare un range:
Select .... from [Articoli$A3:B10']

ma non mi funziona:
1. Perché sul foglio excel ho le colonne in cifre es: R[1]C[2] ed i numeri possono andare in negativo,,,bho', comunque sia con A3...o R[1]...non funziona niente.

E poi anche se funzionasse io non so' la lunghezza della tabella...perché si possono aggiungere dei dati.

Dorei riuscire a far leggere la tabella (select .... from ....) da una riga in poi: es dalla 12 dove c'é l'intestazione delle colonne.

Qualcuno puo' darmi un indizio su come fare.

grazie

alka
12-07-2005, 16:06
Potresti leggere una riga per volta, fino a quando non incontri una cella dal contenuto vuoto.

Ciao! :ciauz:

idra46
12-07-2005, 16:13
Non capisco cosa intendi....
io leggo il file(foglio) Excel come se fosse un DB, con una query

select campo1,campo2 from foglio1$

e lo carico in una tabella in delphi.

il problema che sopra la tabella(in excel) ho delle immagini e un titolo. Usando la select non riesce a trovarmi la tabella.

grazie

alka
12-07-2005, 16:28
Un accesso al foglio Excel di quel tipo presuppone che ciascuna colonna abbia poi un preciso tipo di dato associato, altrimenti si rischia di cadere in seri problemi ed effetti collaterali.

Cosa usi per accedere a Excel? I componenti ADO?

idra46
12-07-2005, 16:45
Ho usato questo link:
http://delphi.about.com/od/database/l/aa090903b.htm

alka
12-07-2005, 16:49
Quindi hai usato ADO. Se il tuo foglio Excel non è organizzato in modo estremamente rigido, questa interfaccia potrebbe crearti qualche problema.

Eventualmente, prova a valutare l'uso di componenti di terze parti specifici per l'accesso ad applicativi Office, come ad esempio TurboPower OfficePartner (http://sourceforge.net/projects/tpofficepartner/), freeware e OpenSource, con buona documentazione (in lingua inglese).

Io li ho utilizzati con grossi benefici per accedere ad Outlook.

So che è una soluzione un po' drastica e magari avresti preferito un suggerimento meno spiazzante... :)

Ciao! :ciauz:

idra46
13-07-2005, 08:51
Grazie...infatti é una soluzione un po' drastica....
il foglio excel é strutturato bene...con ado riesco a leggere la tabella e caricarla in un grid in delphi, e funziona tutto.....
il problema é che non riesco a dirgli da dove cominciare a leggere con la query, nel senso che se il foglio contiene solo i dati, tutto ok, se invece sopra la tabella c'é qualcosa....fatico a leggere.

Ma ho letto che nella quera di selezione si puo' usare:
select * from[Articoli$]
per leggere tutto il foglio, e funziona se ho solo la tabella con i dati.
Se invece ho delle immagini sopra la tabella, si dovrebbe fare così:
select * from [Articoli$B12:L420]
e mi dice che l'oggetto Parameter non é stato definito correttamente....

Help...
mi sembra strano.

La connessione é:
Conn:='Provider=Microsoft.Jet.OLEDB.4.0;' +
'Persist Security Info=False; '+
'Data Source='+Edit1.Text+';'+
'Extended Properties=Excel 8.0';
Ma il problema non mi sembra nella connessione.

Proprio non mi lascia passargli il range di riferimento per la select...

grazie

alka
13-07-2005, 09:23
Il carattere ":" normalmente identifica un parametro, perciò non vorrei che la tua stringa, seppur corretta, venisse mal compresa da ADO o da Delphi.

Prova ad impostare la proprietà ParamCheck del componente ADOQuery a False: in questo modo, dovresti evitare il "parsing" della stringa SQL e la generazione automatica di parametri che, in fondo, sono fasulli poichè il carattere ":" definisce un range, in questo caso.

Fammi sapere, che sono curioso... :)

Ciao! :ciauz:

idra46
13-07-2005, 13:28
MITTICOOOO....era quello il problema...
adesso riesco a caricare con la select dandogli un range...

Grazie Mille

alka
13-07-2005, 13:34
Originariamente inviato da idra46
MITTICOOOO....era quello il problema...
adesso riesco a caricare con la select dandogli un range...

Ne ho imparata una nuova allora. :)

Ciao! :ciauz:

Loading