尝试保存Excel文档时,“保存应用程序类”类失败

时间:2014-08-27 07:16:42

标签: excel delphi

我在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中执行。

4 个答案:

答案 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类中更改如何进行传输/保存!

相关问题