Excel-sheets bewerken met Delphi en ADO

In deze stapsgewijze handleiding wordt beschreven hoe u verbinding kunt maken met Microsoft Excel, bladgegevens kunt ophalen en de gegevens kunt bewerken met behulp van DBGrid. U vindt ook een lijst met de meest voorkomende fouten die tijdens het proces kunnen optreden, plus hoe u hiermee kunt omgaan.

Wat hieronder wordt behandeld:

  • Methoden voor het overbrengen van gegevens tussen Excel en Delphi. Hoe verbinding te maken met Excel met ADO (ActiveX Data Objects) en Delphi.
  • Een Excel-spreadsheet-editor maken met Delphi en ADO
  • Gegevens ophalen uit Excel. Verwijzen naar een tabel (of bereik) in een Excel-werkmap.
  • Een discussie over Excel veld (kolom) types
  • Hoe Excel-bladen te wijzigen: rijen bewerken, toevoegen en verwijderen.
  • Gegevens overbrengen van een Delphi-toepassing naar Excel. Een werkblad maken en vullen met aangepaste gegevens uit een MS Access-database.

Hoe verbinding te maken met Microsoft Excel

Microsoft Excel is een krachtige spreadsheetcalculator en tool voor gegevensanalyse. Aangezien rijen en kolommen van een Excel-werkblad nauw verband houden met de rijen en kolommen van een databasetabel, vinden veel ontwikkelaars het gepast om hun gegevens voor analyse naar een Excel-werkmap te transporteren; en daarna gegevens terughalen naar de toepassing.

De meest gebruikte methode voor gegevensuitwisseling tussen uw toepassing en Excel is Automatisering. Automatisering biedt een manier om Excel-gegevens te lezen met behulp van het Excel-objectmodel om in het werkblad te duiken, de gegevens te extraheren en weer te geven in een rasterachtige component, namelijk DBGrid of StringGrid.

Automatisering geeft u de grootste flexibiliteit voor het lokaliseren van de gegevens in de werkmap, evenals de mogelijkheid om het werkblad op te maken en verschillende instellingen te maken tijdens runtime.

Om uw gegevens zonder automatisering van en naar Excel over te dragen, kunt u andere methoden gebruiken, zoals:

  • Schrijf gegevens in een door komma's gescheiden tekstbestand en laat Excel het bestand in cellen parseren
  • Gegevens overdragen met DDE (Dynamic Data Exchange)
  • Breng uw gegevens over van en naar een werkblad met ADO

Gegevensoverdracht met ADO

Omdat Excel JET OLE DB-compatibel is, kunt u er verbinding mee maken met Delphi via ADO (dbGO of AdoExpress) en vervolgens de werkbladgegevens ophalen in een ADO-gegevensset door een SQL-query uit te voeren (net zoals u een gegevensset tegen een databasetabel zou openen).

Op deze manier zijn alle methoden en functies van het ADODataset-object beschikbaar om de Excel-gegevens te verwerken. Met andere woorden, met behulp van de ADO-componenten kunt u een applicatie bouwen die een Excel-werkmap als database kan gebruiken. Een ander belangrijk feit is dat Excel een out-of-process ActiveX-server is. ADO voert een proces uit en bespaart de overhead op kostbare out-of-process-oproepen.

Wanneer u via ADO verbinding maakt met Excel, kunt u alleen onbewerkte gegevens van en naar een werkmap uitwisselen. Een ADO-verbinding kan niet worden gebruikt voor bladopmaak of het implementeren van formules in cellen. Als u uw gegevens echter overbrengt naar een werkblad dat vooraf is opgemaakt, blijft de indeling behouden. Nadat de gegevens vanuit uw toepassing in Excel zijn ingevoegd, kunt u elke voorwaardelijke opmaak uitvoeren met een (vooraf opgenomen) macro in het werkblad.

U kunt via ADO verbinding maken met Excel met de twee OLE DB Providers die deel uitmaken van MDAC: Microsoft Jet OLE DB Provider of Microsoft OLE DB Provider voor ODBC-stuurprogramma's. We zullen ons richten op Jet OLE DB Provider, die kan worden gebruikt om toegang te krijgen tot gegevens in Excel-werkmappen via installeerbare ISAM-stuurprogramma's (Indexed Sequential Access Method).

Tip: Zie de beginnerscursus voor Delphi ADO-databaseprogrammering als je nieuw bent bij ADO.

De ConnectionString Magic

De eigenschap ConnectionString vertelt ADO hoe verbinding moet worden gemaakt met de gegevensbron. De waarde die wordt gebruikt voor ConnectionString bestaat uit een of meer argumenten die ADO gebruikt om de verbinding tot stand te brengen.

In Delphi omvat de component TADOConnection het ADO-verbindingsobject; het kan worden gedeeld door meerdere ADO-gegevensset (TADOTable, TADOQuery, etc.) componenten via hun verbindingseigenschappen.