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 DBGrid. Troverai anche un elenco degli errori più comuni che potrebbero apparire nel processo, oltre a come gestirli.

Cosa c'è sotto:

  • Metodi per il trasferimento di 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 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 di Excel sono strettamente correlate alle righe e alle colonne di una tabella del database, molti sviluppatori ritengono opportuno trasportare i propri dati in una cartella di lavoro di Excel a scopo di analisi; e recuperare successivamente i dati nell'applicazione.

L'approccio più comunemente usato allo scambio di dati tra l'applicazione e Excel è 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, vale a dire DBGrid o StringGrid.

L'automazione offre la massima flessibilità per l'individuazione dei dati nella cartella di lavoro, nonché la possibilità di formattare il foglio di lavoro e configurare varie impostazioni in fase di esecuzione.

Per trasferire i tuoi 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 in celle
  • Trasferisci dati usando DDE (Dynamic Data Exchange)
  • Trasferisci i tuoi dati da e verso un foglio di lavoro usando ADO

Trasferimento dati tramite ADO

Poiché Excel è conforme a JET OLE DB, è possibile connettersi 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 se si aprisse 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 in grado di utilizzare una cartella di lavoro Excel come database. Un altro fatto importante è che Excel è un server ActiveX fuori processo. ADO viene eseguito in-process e risparmia il sovraccarico di costose chiamate out-of-process.

Quando ci si connette a Excel tramite ADO, è possibile scambiare solo dati non elaborati da e verso una cartella di lavoro. Non è possibile utilizzare una connessione ADO per la formattazione del foglio o l'implementazione di formule nelle celle. Tuttavia, se si trasferiscono i dati in un foglio di lavoro preformattato, il formato viene mantenuto. Dopo aver inserito i dati 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 Jet OLE DB, che può essere utilizzato per accedere ai dati nelle cartelle di lavoro di Excel tramite driver ISAM (Indexial Sequential Access Method) installabili.

Mancia: Consulta il Corso per principianti alla programmazione del database ADO di Delphi se non conosci ADO.

La Magia di ConnectionString

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 di connessione ADO; può essere condiviso da più componenti del set di dati ADO (TADOTable, TADOQuery, ecc.) tramite le proprietà di connessione.