在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)时,