2012-05-08 75 views
1

使用Delphi编写数据库应用程序并需要将数据从访问数据库导出到Excel电子表格。我可以使用docmd.spreadsheet管理反向序列(导入excel来访问)。工程100%。但我不知道如何设置导出参数。我需要帮助。如何使用Delphi将Access数据库导出到Excel

回答

4

请检查此示例代码,我也建议您阅读DoCmd.TransferSpreadsheet Method文档。

{$APPTYPE CONSOLE} 

uses 
    SysUtils, 
    ActiveX, 
    ComObj; 

procedure ExportDataAccess(const AccessDb, TableName, ExcelFileName:String); 
Const 
    acQuitSaveAll    = $00000001; 
    acExport     = $00000001; 
    acSpreadsheetTypeExcel9 = $00000008; 
    acSpreadsheetTypeExcel12 = $00000009; 
var 
LAccess : OleVariant; 
begin 
//create the COM Object 
LAccess := CreateOleObject('Access.Application'); 
//open the access database 
LAccess.OpenCurrentDatabase(AccessDb); 
//export the data 
LAccess.DoCmd.TransferSpreadsheet(acExport, acSpreadsheetTypeExcel9, TableName, ExcelFileName, True); 
LAccess.CloseCurrentDatabase; 
LAccess.Quit(1); 
end; 

begin 
try 
    CoInitialize(nil); 
    try 
     ExportDataAccess('C:\Datos\Database1.accdb','Sales','C:\Datos\MyExcelFile.xls'); 
     Writeln('Done'); 
    finally 
     CoUninitialize; 
    end; 
except 
    on E:EOleException do 
     Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode])); 
    on E:Exception do 
     Writeln(E.Classname, ':', E.Message); 
end; 
Writeln('Press Enter to exit'); 
Readln; 
end. 
+0

我用你以前的答案导入一个Excel它工作100%。我预计出口应该如何运作。但它没有正常工作。你对这个问题的回答与我最初编码的相同。问题是1):如果程序导出到一个不存在的文件,它会创建一个文件。但是,当我使用Excel打开文件时,会出现错误:Excel无法打开文件'Çodes.xlsx',因为文件格式或文件扩展名无效。验证文件是否已损坏,文件扩展名是否与文件的格式相匹配。你能帮我吗? – Bossa

+0

如果你想使用2007 excel格式,你必须传递'acSpreadsheetTypeExcel12Xml'的值,该值定义为'acSpreadsheetTypeExcel12Xml = $ 0000000A;'否则只需将文件扩展名重命名为xls。 – RRUZ

相关问题