在Delphi 7中使用TExcelWorkBook SaveAs方法时出现Ole 800A03EC错误

我想打开Excel 2003工作簿,并保存为其他东西,例如Excel 95.我使用下面的代码:

XLSApp:=TExcelApplication.Create(Self); XLSApp.Workbooks.Open(SomeFileName,NULL,false,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,defaultlcid); XLSWB:=TExcelWorkbook.Create(XLSApp); XLSWB.ConnectTo(XLSApp.Workbooks.Item[1]); XLSWB.SaveCopyAs(ExtractFilePath(edTable.Text)+'temp.xls'); XLSWB.SaveAs(SomeOtherFileName,xlExcel7,EmptyParam,EmptyParam,False,False,xlNoChange,xlUserResolution,False,EmptyParam,EmptyParam,EmptyParam,DefaultLCID); 

不幸的是,这个代码在客户端计算机上给出“Ole 800A03EC”,而它在我的工作。 请注意,我已经安装了Office 2007,并且他拥有Office 2003 SP3。

任何帮助将非常感激。

自动化Excel时,我曾经看到过这个错误。 当用户有一个编辑模式的单元格,并试图自动化该实例时,就发生了这种情况。 当你编辑一个单元格时,Excel不喜欢它,而某些程序在后台摆弄。

所以这就是你的客户发生的事情(我认为):

  • 您的客户端已打开Excel并正在编辑单元格(select一个单元格并按F2)
  • 你的代码开始:
    • 您创build一个TExcelApplication并访问工作簿属性。 由于您的Excel应用程序尚未连接,因此调用了TOleServer.Connect(查看GetDefaultInterface的实现)
    • 由于默认connectkind是ckRunningOrNew,因此TExcelApplication连接到正在运行的实例。
    • 因为客户端正在编辑一个单元格,所以在Open方法上出现错误。

如何防止这种情况:将TExcelApplication的ConnectKind设置为ckNewInstance,以便始终在单独的Excel实例中工作。

800A03EC也会发生,当一个(像我这样)做一个愚蠢的事情,像试图加载到一个不存在的Excel单元格,如:

 excel.Cells[rowIndex, ri] = x; where ri is 0. 

注意: col索引从1开始,而不是从0开始。

OLE 800A03EC通常与Excel文件中的无效字符有关。 你是否使用与客户相同的数据? 区域设置有区别吗? 等等,这可能有一些错误,但最有可能的(如谷歌告诉我的一个快速),这是一个区域设置。

在我的情况下(xlExcel8格式):

代替:

 theWorkbookWyjscie.SaveAs(saveFileDialog1.FileName, myExcel.XlFileFormat.xlExcel8); 

我用了:

 theWorkbookWyjscie.SaveAs(saveFileDialog1.FileName); 

要么

 theWorkbookWyjscie.SaveAs(saveFileDialog1.FileName, myExcel.XlFileFormat.xlExcel7); 

两者都工作得很好…而且,我知道这是一个愚蠢的解决scheme,但它的工作!

我试图存储太多的数据到WorkSheet(通过delphi)时,