Modifica di fogli Excel con Delphi e ADO

Questa guida dettagliata descrive come connettersi a Microsoft Excel, recuperare i dati del foglio e abilitare la modifica dei dati utilizzando il DBGrid. Troverai anche un elenco degli errori più comuni che potrebbero apparire nel processo, oltre a come gestirli.

Cosa è coperto di seguito:

  • Metodi per il trasferimento dei dati tra Excel e Delphi. Come connettersi a Excel con ADO (ActiveX Data Objects) e Delphi.
  • Creazione di un editor di fogli di calcolo Excel utilizzando Delphi e ADO
  • Recupero dei dati da Excel. Come fare riferimento a una tabella (o intervallo) in una cartella di lavoro di Excel.
  • Una discussione sui tipi di campo (colonna) di Excel
  • Come modificare i fogli Excel: modifica, aggiungi ed elimina righe.
  • Trasferimento di dati da un’applicazione Delphi a Excel. Come creare un foglio di lavoro e riempirlo con dati personalizzati da un database MS Access.

Come connettersi a Microsoft Excel

Microsoft Excel è un potente calcolatore di fogli di calcolo e uno strumento di analisi dei dati. Poiché le righe e le colonne di un foglio di lavoro Excel sono strettamente correlate alle righe e alle colonne di una tabella di database, molti sviluppatori ritengono appropriato trasportare i propri dati in una cartella di lavoro di Excel a scopo di analisi; e recuperare i dati nell’applicazione in seguito.

L’approccio più comunemente utilizzato allo scambio di dati tra l’applicazione ed Excel è l’automazione. L’automazione fornisce un modo per leggere i dati di Excel utilizzando il modello a oggetti di Excel per immergersi nel foglio di lavoro, estrarne i dati e visualizzarli all’interno di un componente simile a una griglia, ovvero DBGrid o StringGrid.

L’automazione offre la massima flessibilità per individuare i dati nella cartella di lavoro, nonché la possibilità di formattare il foglio di lavoro e di effettuare varie impostazioni in fase di esecuzione.

Per trasferire i dati da e verso Excel senza automazione, puoi utilizzare altri metodi come:

  • Scrivi i dati in un file di testo delimitato da virgole e lascia che Excel analizzi il file nelle celle
  • Trasferire i dati utilizzando DDE (Dynamic Data Exchange)
  • Trasferisci i tuoi dati da e verso un foglio di lavoro utilizzando ADO

Trasferimento dati tramite ADO

Poiché Excel è conforme a JET OLE DB, puoi connetterti ad esso con Delphi utilizzando ADO (dbGO o AdoExpress) e quindi recuperare i dati del foglio di lavoro in un set di dati ADO emettendo una query SQL (proprio come apriresti un set di dati su qualsiasi tabella di database) .

In questo modo, tutti i metodi e le funzionalità dell’oggetto ADODataset sono disponibili per elaborare i dati di Excel. In altre parole, l’utilizzo dei componenti ADO consente di creare un’applicazione che può utilizzare una cartella di lavoro di Excel come database. Un altro fatto importante è che Excel è un server ActiveX out-of-process. ADO viene eseguito in-process e risparmia il sovraccarico di costose chiamate out-of-process.

Quando ti connetti a Excel utilizzando ADO, puoi solo scambiare dati non elaborati da e verso una cartella di lavoro. Non è possibile utilizzare una connessione ADO per la formattazione del foglio o per l’implementazione di formule nelle celle. Tuttavia, se trasferisci i dati in un foglio di lavoro preformattato, il formato viene mantenuto. Dopo che i dati sono stati inseriti dall’applicazione in Excel, è possibile eseguire qualsiasi formattazione condizionale utilizzando una macro (preregistrata) nel foglio di lavoro.

È possibile connettersi a Excel utilizzando ADO con i due provider OLE DB che fanno parte di MDAC: provider OLE DB Microsoft Jet o provider OLE DB Microsoft per driver ODBC. Ci concentreremo sul provider OLE DB Jet, che può essere utilizzato per accedere ai dati nelle cartelle di lavoro di Excel tramite driver ISAM (Indexed Sequential Access Method) installabili.

Mancia: Se non conosci ADO, consulta il corso per principianti alla programmazione di database ADO di Delphi.

Il ConnectionString Magic

La proprietà ConnectionString indica ad ADO come connettersi all’origine dati. Il valore utilizzato per ConnectionString è costituito da uno o più argomenti utilizzati da ADO per stabilire la connessione.

In Delphi, il componente TADOConnection incapsula l’oggetto connessione ADO; può essere condiviso da più componenti del set di dati ADO (TADOTable, TADOQuery e così via) tramite le relative proprietà di connessione.

Per connettersi a Excel, una stringa di connessione valida implica solo due ulteriori informazioni: il percorso completo della cartella di lavoro e la versione del file Excel.

Una stringa di connessione legittima potrebbe essere simile a questa:

ConnectionString: = 'Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:  MyWorkBooks  myDataBook.xls; Proprietà estese = Excel 8.0;';

Quando ci si connette a un formato di database esterno supportato dal Jet, è necessario impostare le proprietà estese per la connessione. Nel nostro caso, quando ci si connette a un “database” di Excel, vengono utilizzate proprietà estese per impostare la versione del file Excel. 

Per una cartella di lavoro Excel95, questo valore è “Excel 5.0” (senza virgolette); utilizzare “Excel 8.0” per Excel 97, Excel 2000, Excel 2002 e ExcelXP.

Importante: È necessario utilizzare il provider Jet 4.0 poiché Jet 3.5 non supporta i driver ISAM. Se imposti Jet Provider alla versione 3.5, riceverai l’errore “Impossibile trovare ISAM installabile”.

Un’altra proprietà estesa di Jet è “HDR =”. “HDR = Sì” significa che è presente una riga di intestazione nell’intervallo, quindi Jet non includerà la prima riga della selezione nel set di dati. Se viene specificato “HDR = No”, il provider includerà la prima riga dell’intervallo (o intervallo denominato) nel set di dati.

La prima riga di un intervallo è considerata la riga di intestazione per impostazione predefinita (“HDR = Sì”). Pertanto, se si dispone di un’intestazione di colonna, non è necessario specificare questo valore. Se non hai intestazioni di colonna, devi specificare “HDR = No”.

Ora che sei pronto, questa è la parte in cui le cose diventano interessanti poiché ora siamo pronti per un po ‘di codice. Vediamo come creare un semplice editor di fogli di calcolo Excel utilizzando Delphi e ADO.

Nota: Dovresti procedere anche se non hai conoscenze sulla programmazione ADO e Jet. Come vedrai, modificare una cartella di lavoro di Excel è semplice come modificare i dati da qualsiasi database standard.