【问题标题】:Ole 800A03EC error when using TExcelWorkBook SaveAs method in Delphi 7在 Delphi 7 中使用 TExcelWorkBook SaveAs 方法时出现 Ole 800A03EC 错误
【发布时间】:2011-01-22 07:06:38
【问题描述】:

我正在尝试打开 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。

非常感谢任何帮助。

【问题讨论】:

    标签: delphi excel automation ole


    【解决方案1】:

    我曾经在自动执行 Excel 时看到过这个错误。当用户有一个处于编辑模式的单元格并且您尝试自动化该实例时,就会发生这种情况。 Excel 不喜欢当您正在编辑单元格并且某些程序在后台摆弄时。

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

    • 您的客户端已打开 Excel,并且 编辑一个单元格(选择一个单元格并 按 F2)
    • 您的代码开始:
      • 您创建一个 TExcelApplication 并访问 Workbooks 属性。由于您的 Excel 应用程序尚未连接,它会调用 TOleServer.Connect(查看 GetDefaultInterface 的实现)
      • 由于默认连接类型为 ckRunningOrNew,因此 TExcelApplication 连接到正在运行的实例。
      • 由于客户端正在编辑单元格,因此您在 Open 方法上遇到错误。

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

    【讨论】:

      【解决方案2】:

      800A03EC 也会发生在一个人(比如我)做了一件愚蠢的事情,比如试图加载到一个不存在的 Excel 单元格中,比如:

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

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

      【讨论】:

        【解决方案3】:

        就我而言(xlExcel8 格式):

        代替:

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

        我用过:

        theWorkbookWyjscie.SaveAs(saveFileDialog1.FileName);
        

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

        两者都运行良好...是的,我知道这是一个愚蠢的解决方案,但它的工作原理!

        【讨论】:

          【解决方案4】:

          尝试将过多数据存储到 WorkSheet(通过 Delphi)时出现该错误

          【讨论】:

            【解决方案5】:

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

            【讨论】:

            • 区域设置可能不同。我们使用的文件是一样的。我需要程序在任何区域设置下都能顺利运行,我该怎么办?
            猜你喜欢
            • 1970-01-01
            • 2011-07-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多