关于数据导出到Excel,并保存为Excel文件中的错误
关于数据导出到Excel,并保存为Excel文件中的异常
procedure DataToExcel;
var
ExcelApp: Variant;
begin
try
ExcelApp := CreateOleObject( 'Excel.Application' );
ExcelApp.Visible := True;
ExcelApp.WorkBooks.Add;
except
ShowMessage('未安装Microsoft Excel 2000!请安装!');
Exit
end;
DataToExcelOne(ExcelApp); //表格一的数据填充
DataToExcelTwo(ExcelApp); //表格二的数据填充
ExcelApp.WorkBooks.SaveAs(ExtractFilePath(ParamStr(0)) + 'Doc\' + FormatDatetime('YYYYMMddhhmm', now) + '.xls');
ExcelApp.WorkBooks.Close;
ExcelApp.Quit;
end;
程序在SaveAs的时候报错,提示:
------解决思路----------------------
还是不要使用Delphi自带的ExcelApp。一是特别慢,二是编程代码复杂。
建议敷衍第三方控件,又快又方便。
------解决思路----------------------
uses
... ComObj,...
private
...
Excel, XLApp: Variant;
WorkBook: Variant;
Sheet1, Sheet2, Sheet3, Sheet4: Variant;
// SheetAuto, SheetManu: Variant;
myRange1, myRange2, headRange: Variant;
myRange1s, myRange1d, myRange2s, myRange2d: Variant;
...
事件中加入:
try
XLApp := GetActiveOleObject('Excel.Application'); // 判断是否已启动
except
XLApp := CreateOleObject('Excel.Application');
// 否则启动Excel; 通常自动化服务器启动是隐藏的;
end;
try
WorkBook := XLApp.workBooks.Open(fName);
except
Memo1.Lines.Add('未找到文件:' + fName);
exit;
end;
if cbXlVisible.Checked then
XLApp.visible := true
else
XLApp.visible := False;
// 关闭屏幕刷新
if cbRefresh.Checked then
XLApp.ScreenUpdating := true
else
XLApp.ScreenUpdating := False;
。。。。。。。。。。。。。。。。
Sheet3 := XLApp.workBooks[3].WorkSheets['sheet1'];
if blockCountH = 1 then
Sheet3.Cells[2, 1].Value := sTitle
else
Sheet3.Cells[2, 1].Value := sTitle1;
sDestFile := getFileNameExcPathSuf(fName) + '_' +
intToStr((j + 1) div 2) + '-' + intToStr(i) + '_l.xlsx';
// Memo2.Lines.Add(sDestFile);
// 正式版 ----
XLApp.workBooks[3].SaveAs(path + 'result\' + strJuanCode + '\' +
sDestFile);
// 正式版 ====
XLApp.DisplayAlerts:=false;
XLApp.workBooks[3].close;
。。。。。。。。。。。。。。。。
上面都是我正在用的
可能你的saveas有问题
------解决思路----------------------
XLApp.workBooks[3].SaveAs(path + 'result\' + strJuanCode + '\' +
sDestFile);
procedure DataToExcel;
var
ExcelApp: Variant;
begin
try
ExcelApp := CreateOleObject( 'Excel.Application' );
ExcelApp.Visible := True;
ExcelApp.WorkBooks.Add;
except
ShowMessage('未安装Microsoft Excel 2000!请安装!');
Exit
end;
DataToExcelOne(ExcelApp); //表格一的数据填充
DataToExcelTwo(ExcelApp); //表格二的数据填充
ExcelApp.WorkBooks.SaveAs(ExtractFilePath(ParamStr(0)) + 'Doc\' + FormatDatetime('YYYYMMddhhmm', now) + '.xls');
ExcelApp.WorkBooks.Close;
ExcelApp.Quit;
end;
程序在SaveAs的时候报错,提示:
------解决思路----------------------
还是不要使用Delphi自带的ExcelApp。一是特别慢,二是编程代码复杂。
建议敷衍第三方控件,又快又方便。
------解决思路----------------------
uses
... ComObj,...
private
...
Excel, XLApp: Variant;
WorkBook: Variant;
Sheet1, Sheet2, Sheet3, Sheet4: Variant;
// SheetAuto, SheetManu: Variant;
myRange1, myRange2, headRange: Variant;
myRange1s, myRange1d, myRange2s, myRange2d: Variant;
...
事件中加入:
try
XLApp := GetActiveOleObject('Excel.Application'); // 判断是否已启动
except
XLApp := CreateOleObject('Excel.Application');
// 否则启动Excel; 通常自动化服务器启动是隐藏的;
end;
try
WorkBook := XLApp.workBooks.Open(fName);
except
Memo1.Lines.Add('未找到文件:' + fName);
exit;
end;
if cbXlVisible.Checked then
XLApp.visible := true
else
XLApp.visible := False;
// 关闭屏幕刷新
if cbRefresh.Checked then
XLApp.ScreenUpdating := true
else
XLApp.ScreenUpdating := False;
。。。。。。。。。。。。。。。。
Sheet3 := XLApp.workBooks[3].WorkSheets['sheet1'];
if blockCountH = 1 then
Sheet3.Cells[2, 1].Value := sTitle
else
Sheet3.Cells[2, 1].Value := sTitle1;
sDestFile := getFileNameExcPathSuf(fName) + '_' +
intToStr((j + 1) div 2) + '-' + intToStr(i) + '_l.xlsx';
// Memo2.Lines.Add(sDestFile);
// 正式版 ----
XLApp.workBooks[3].SaveAs(path + 'result\' + strJuanCode + '\' +
sDestFile);
// 正式版 ====
XLApp.DisplayAlerts:=false;
XLApp.workBooks[3].close;
。。。。。。。。。。。。。。。。
上面都是我正在用的
可能你的saveas有问题
------解决思路----------------------
XLApp.workBooks[3].SaveAs(path + 'result\' + strJuanCode + '\' +
sDestFile);