将adoquery中的数据导入excel文件,使用QueryTables,有问题???
我想将adoquery中的数据导入excel文件,别的贴子上的方法有点慢,看到一个关于QueryTables的,速度很快.
但在excel97下报错"参数错误",在excel2000下是可以的.
那位高手知道此问题的解决方法.
关键是以下这句代码
XLQuery := xlSheet.QueryTables.Add(ADOQueryExcel.Recordset,xlSheet.Range['A1']);
procedure TPub.QueryTablesToExcelFile(ADOQueryExcel: TADOQuery);
var
xlVersion : string;
XLApp: Variant;
XLSheet: Variant;
XLQuery: Variant;
SaveDialog:TSaveDialog;
StrSaveFile:string;
begin
if ADOQueryExcel.IsEmpty then
begin
messagebox(application.Handle,'没有任何数据,不能进行保存','警告',mb_ok);
abort;
end;
SaveDialog:=TSaveDialog.Create(Nil);
SaveDialog.Filter := 'Microsoft Excel 文件|*.xls';
SaveDialog.Execute;
StrSaveFile:=SaveDialog.FileName;
if length(StrSaveFile)=0 then
begin
exit;
end;
try
screen.Cursor:=crHourGlass;
try
XLApp := CreateOleObject('Excel.Application');
XLApp.WorkBooks.Add(-4167);
XLApp.WorkBooks[1].WorkSheets[1].Name := '导出数据';
XLSheet := XLApp.WorkBooks[1].WorkSheets['导出数据'];
except
MessageBox(GetActiveWindow,'无法调用Mircorsoft Excel! '+chr(13)+chr(10)+
'请检查是否安装了Mircorsoft Excel。','提示',MB_OK+MB_ICONINFORMATION);
Exit;
end;
xlVersion := XLApp.Version;
XLQuery := xlSheet.QueryTables.Add(ADOQueryExcel.Recordset,xlSheet.Range['A1']);
XLQuery.FieldNames := true;
XLQuery.RowNumbers := false;
XLQuery.FillAdjacentFormulas := false;
XLQuery.PreserveFormatting := true;
XLQuery.RefreshOnFileOpen := false;
XLQuery.BackgroundQuery := true;
XLQuery.SavePassword := true;
XLQuery.SaveData := true;
XLQuery.AdjustColumnWidth := true;
XLQuery.RefreshPeriod := 0;
XLQuery.PreserveColumnInfo := true;
XLQuery.FieldNames := true;
XLQuery.Refresh(false);
XLSheet.Cells.EntireColumn.AutoFit;
XLApp.activeworkbook.saveas(StrSaveFile);
Application.ProcessMessages;
XLApp.Application.Quit;
XLSheet := 'Unassigned';
XLApp := 'Unassigned';
Showmessage('成功导出数据(列为日期类型的需重新设置单元格格式)!');
Finally
SaveDialog.Free;
screen.Cursor := crDefault;
end;
end;