Redigera Excel-ark med Delphi och ADO

Den här steg-för-steg-guiden beskriver hur du ansluter till Microsoft Excel, hämtar arkdata och aktiverar redigering av data med DBGrid. Du hittar också en lista över de vanligaste felen som kan visas i processen, samt hur du hanterar dem.

Vad täcks nedan:

  • Metoder för överföring av data mellan Excel och Delphi. Hur du ansluter till Excel med ADO (ActiveX Data Objects) och Delphi.
  • Skapa en Excel-kalkylarkeditor med Delphi och ADO
  • Hämtar data från Excel. Hur man refererar till en tabell (eller intervall) i en Excel-arbetsbok.
  • En diskussion om typer av Excel-fält (kolumn)
  • Så här ändrar du Excel-ark: redigera, lägga till och ta bort rader.
  • Överföra data från en Delphi-applikation till Excel. Hur man skapar ett kalkylblad och fyller det med anpassade data från en MS Access-databas.

Hur du ansluter till Microsoft Excel

Microsoft Excel är ett kraftfullt kalkylkalkylator och dataanalysverktyg. Eftersom rader och kolumner i ett Excel-kalkylblad nära anknyter till raderna och kolumnerna i en databastabell, tycker många utvecklare det lämpligt att transportera sina data till en Excel-arbetsbok för analysändamål; och hämta data tillbaka till applikationen efteråt.

Den mest använda metoden för datautbyte mellan din applikation och Excel är Automatisering. Automation ger ett sätt att läsa Excel-data med hjälp av Excel Object Model för att dyka in i kalkylbladet, extrahera dess data och visa dem i en rutnätliknande komponent, nämligen DBGrid eller StringGrid.

Automation ger dig den största flexibiliteten för att hitta informationen i arbetsboken såväl som möjligheten att formatera kalkylbladet och göra olika inställningar vid körning.

För att överföra dina data till och från Excel utan automatisering kan du använda andra metoder som:

  • Skriv data i en kommaseparerad textfil och låt Excel analysera filen till celler
  • Överför data med DDE (Dynamic Data Exchange)
  • Överför dina data till och från ett kalkylblad med ADO

Dataöverföring med ADO

Eftersom Excel är JET OLE DB-kompatibelt kan du ansluta till det med Delphi med ADO (dbGO eller AdoExpress) och sedan hämta kalkylbladets data till en ADO-datasats genom att utfärda en SQL-fråga (precis som om du öppnar ett datasats mot vilken databas som helst).

På detta sätt är alla metoder och funktioner i ADODataset-objektet tillgängliga för att bearbeta Excel-data. Med andra ord, med ADO-komponenterna kan du bygga ett program som kan använda en Excel-arbetsbok som databas. Ett annat viktigt faktum är att Excel är en out-of-process ActiveX-server. ADO kör i processen och sparar omkostnaderna för dyra samtal utanför processen.

När du ansluter till Excel med ADO kan du bara utbyta rådata till och från en arbetsbok. En ADO-anslutning kan inte användas för arkformatering eller implementering av formler på celler. Men om du överför dina data till ett kalkylblad som är förformaterat behålls formatet. När data har lagts in från din applikation till Excel kan du utföra all villkorlig formatering med ett (förinspelat) makro i kalkylbladet.

Du kan ansluta till Excel med ADO med de två OLE DB-leverantörerna som ingår i MDAC: Microsoft Jet OLE DB-leverantör eller Microsoft OLE DB-leverantör för ODBC-drivrutiner. Vi kommer att fokusera på Jet OLE DB-leverantör, som kan användas för att få åtkomst till data i Excel-arbetsböcker genom installerbara Indexed Sequential Access Method (ISAM) drivrutiner.

Dricks: Se nybörjarkursen för Delphi ADO-databasprogrammering om du är ny med ADO.

The ConnectionString Magic

Egenskapen ConnectionString berättar för ADO hur man ansluter till datakällan. Värdet som används för ConnectionString består av ett eller flera argument som ADO använder för att upprätta anslutningen.

I Delphi kapslar TADOConnection-komponenten ADO-anslutningsobjektet; det kan delas av flera ADO-datasätt (TADOTable, TADOQuery, etc.) komponenter via deras anslutningsegenskaper.