我在Delphi中有一个方法可以将一些数据保存到ExcelFile中。本程序适用于除Excel 2013之外的任何类型的Excel。
这是代码
try
// If no instance of Word is running, try to Create a new Excel Object
ExcelApp := CreateOleObject('Excel.Application');
except
ShowMessage('Cannot start Excel/Excel not installed ?');
Exit;
end;
ExcelApp.DisplayAlerts := False;
ExcelApp.Workbooks.Add(xlWBatWorkSheet);
// fill the Excel file
ExcelApp.Visible := True;
// Save the Workbook
ExcelApp.save;
if not VarIsEmpty(ExcelApp) then begin
ExcelApp.DisplayAlerts := False; // Discard unsaved files....
ExcelApp.Quit;
end;
所以正如我所说的,这对于Excel而言仍然很好,直到2013版本。当我尝试在使用Excel 2013的计算机上使用它时,我收到错误
Save Method of Application class failed.
任何想法为什么会发生这种情况以及任何可能的解决方法?
PS我试过
ExcelApp.Workbooks[1].SaveAs('c:\test.xlsx', xlWBATWorksheet);
我也收到错误:
SaveAS Method of Workbook class failed.
我还读到我可能是因为我无法访问以保存在该位置,但我是计算机上的管理员。
如果我帮助执行此操作的时间需要花费更多时间,通常在Excel 2010或Excel 2007中执行。
答案 0 :(得分:2)
根据documentation,Excel Application
对象没有Save
方法。使用SaveAs
对象中的Workbook
。
您正尝试将文件保存到系统卷的根目录,默认情况下,该文件是安全的,以便标准用户无法在该位置创建文件。即使您是管理员,UAC也意味着您的流程使用标准用户令牌运行。
我看到的另一个问题是xlWBATWorksheet
不是文件格式常量。你的意思是使用xlOpenXMLWorkbook
。这应该没问题:
Workbook.SaveAs('c:\somedir\test.xlsx', xlOpenXMLWorkbook);
您可以在计算机上使用某个合适的路径替换c:\somedir
。
切换到早期绑定的COM可能会减轻您的一些困难,但答案总是可以在文档中找到。你不需要盲目做这件事。
答案 1 :(得分:0)
我自己还没有完成任何Microsoft Office自动化,但我记得当时我仍然使用Delphi 7,当你安装它时,安装程序实际上会问你要在哪个版本的办公室安装扩展程序
所以我猜想在不同版本的Microsoft Office使用的COM实现方面存在一些差异,因此Delphi用于Microsoft Office Automation的组件与Office 2013不兼容。
答案 2 :(得分:0)
可能不相关但在VB6中有相同的错误消息(是的,2016年,我仍然在Windows 10上用于奇怪的事情!)因为选择了工作表。在保存之前选择了另一个对象并且它有效。
答案 3 :(得分:0)
您需要为AX 2009安装KB2830391 HF460904 for Excel 2013问题。在一个sysExcel类中更改如何进行传输/保存!