XLSReadWrite导出Excel报错,在线等,急
procedure ExportExcelQuick(ClientDataSet:TClientDataSet);
var
Error,site:integer;
SaveDialogReport:TSaveDialog;
XLSDbRead: TXLSDbRead2;
XLS: TXLSReadWriteII2;
num:integer;
ExportFileName: String;
begin
Error := 0;
if (ClientDataSet.Active) and (ClientDataSet.RecordCount>0) then
begin
SaveDialogReport:=TSaveDialog.Create(nil);
SaveDialogReport.Options := [ofAllowMultiSelect, ofFileMustExist];
SaveDialogReport.Filter := 'Execle files (*.xls)|*.xls';
SaveDialogReport.FilterIndex := 1; { start the dialog showing all files }
if SaveDialogReport.Execute then
begin
if ClientDataSet.RecordCount>0 then
begin
XLS:=TXLSReadWriteII2.Create(nil);
showmessage('XLS Create');
XLSDBRead:=TXLSDbRead2.Create(nil);
showmessage('XLSDBRead');
ExportFileName := SaveDialogReport.FileName;
site := 0;
while (site <length(ExportFileName)+4) do
begin
if site<>pos('.xls',ExportFileName) then
begin
site:=pos('.xls',ExportFileName);
delete(ExportFileName,site,4);
end
else
site:=length(ExportFileName)+4;
end;
showmessage(ExportFileName);
XLS.Filename := ExportFileName+'.xls';
try
try
XLSDBRead.XLS := XLS;
XLSDbRead.Dataset := ClientDataSet;
showmessage('XLSDbRead.Dataset := ClientDataSet');
XLSDbRead.Read;
showmessage('XLSDbRead.Read');
XLS.Write;
showmessage('XLS.Write');
except
on E: Exception do
begin
Error := 1;
MessageDlg(inttostr(num),mtInformation, [mbOK], 0);
MessageDlg(e.Message,mtInformation, [mbOK], 0);
MessageDlg('导出失败。请重试!', mtInformation, [mbOK], 0);
end;
end
finally
SaveDialogReport.Free;
XLS.Free;
XLSDBRead.Free;
end;
if Error =0 then
MessageDlg('导出成功!', mtInformation, [mbOK], 0);
end;
end;
end
else
begin
MessageDlg('没有内容需要导出,请重新查询!', mtInformation, [mbOK], 0);
end;
end;
这段程序使用XLSReadWriteII实现cxgrid导出到Excel
在执行这段程序的时候XLS:=TXLSReadWriteII2.Create(nil);这句和XLSDbRead.Read;这两句不定期的报错
XLS:=TXLSReadWriteII2.Create(nil);这句报错时就是死在了这里,程序自动退出
XLSDbRead.Read;这句就是捕获到异常后,报内存错误
请大家看看问题出在哪里啊?