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 VÄSEN (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, många utvecklare tycker att det är 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 lokalisera data i arbetsboken samt 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 i en ADO-datasats genom att utfärda en SQL-fråga (precis som om du öppnar en datasats mot vilken databas som helst tabell).
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 informationen 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 drivrutiner för indexerad sekventiell åtkomstmetod (ISAM).
Dricks: Se Nybörjarkurs till 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.
För att ansluta till Excel innefattar en giltig anslutningssträng endast två ytterligare informationsdelar - hela vägen till arbetsboken och Excel-filversionen.
En legitim anslutningssträng kan se ut så här:
ConnectionString: = 'Provider = Microsoft. Jet. OLEDB.4.0; Datakälla = C: \ MyWorkBooks \ myDataBook.xls; Utökade egenskaper = Excel 8.0; ';
När du ansluter till ett externt databasformat som stöds av Jet, måste de utökade egenskaperna för anslutningen ställas in. I vårt fall, när du ansluter till en Excel-"databas", används utvidgade egenskaper för att ställa in Excel-filversionen.
För en Excel95-arbetsbok är detta värde "Excel 5.0" (utan citat); använd "Excel 8.0" för Excel 97, Excel 2000, Excel 2002 och ExcelXP.
Viktig: Du måste använda Jet 4.0-leverantören eftersom Jet 3.5 inte stöder ISAM-drivrutinerna. Om du ställer Jet-leverantören till version 3.5 får du felet "Det gick inte att hitta installerbart ISAM".
En annan utvidgad Jet-egenskap är "HDR =". "HDR = Ja" betyder att det finns en rubrikrad i intervallet, så Jet kommer inte att inkludera den första raden i markeringen i datasatsen. Om "HDR = Nej" anges, kommer leverantören att inkludera den första raden i intervallet (eller det namngivna intervallet) i datasatsen.
Den första raden i ett intervall anses som huvudraden som standard ("HDR = Ja"). Därför, om du har kolumnrubrik, behöver du inte ange detta värde. Om du inte har kolumnrubriker måste du ange "HDR = Nej".
Nu när du är redo är det den där saker blir intressanta eftersom vi nu är redo för någon kod. Låt oss se hur man skapar en enkel Excel-kalkylarkeditor med Delphi och ADO.
Notera: Du bör fortsätta även om du saknar kunskap om ADO och Jet-programmering. Som du ser är redigering av en Excel-arbetsbok lika enkel som att redigera data från vilken standarddatabas som helst.