使用Interop在C#中打开Excel文件时出现异常

本文关键字:文件 异常 Excel Interop 使用 | 更新日期: 2023-09-27 18:21:56

我有一个程序在服务器上运行,它每天从网站下载.xls文件,打开它,然后将其转换为.csv,以便能够正确解析并添加到数据库中。

当我在本地电脑上运行它时,一切都很好,而且大部分时间都在服务器上运行,但可能每周有一两次我会遇到这样的异常:

出现异常:System.Runtime.InteropServices.COMException(0x800A03EC):HRESULT中的异常:0x800A03EC位于Microsoft.Office.Interop.Excel.Workbooks.Open(字符串文件名、对象更新链接、对象只读、对象格式、对象密码、对象WriteResPassword、对象IgnoreReadOnlyRecommended、对象原点、对象分隔符、对象可编辑、对象通知、对象转换器、对象AddToMru、对象本地、对象损坏加载)

下面是一个代码片段:

 Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook wbWorkbook = app.Workbooks.Open(_dir + _fileNameTrim + ".xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            wbWorkbook.SaveAs(_dir + _fileNameTrim + ".csv", Microsoft.Office.Interop.Excel.XlFileFormat.xlCSVWindows, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            wbWorkbook.Close(false, "", true);

我在网上读过很多东西,很多解决方案都提到了安全设置,但我不认为我是这样,否则根本不起作用。人们还提到该文件已被破坏。我真的不确定。任何帮助都将不胜感激。

更新:

服务器上安装了Excel,尝试打开文件时发生异常。

使用Interop在C#中打开Excel文件时出现异常

Run>dcomcnfg

这将打开组件服务并导航到控制台根目录''组件服务''计算机''我的电脑'' DCOM配置'' Microsoft Excel应用程序右键单击Microsoft Excel应用程序并选择属性

单击"标识"选项卡并检查选择。

当选择选项-交互式用户时,它对我有效

请尝试,祝你好运!!

.Workbooks.Open(strPath,Type.Missing,Type.Mising,Type.Mmissing,Type.Misching,Type-Missing,Type.Missing、Type.Misssing、Type.Misising、Type.Missing.、Type.Minising,Microsoft.Office.Interop.Excel.XlCorruptLoad.xlExtractData);

我也有同样的问题。它与new Microsoft.Office.Interop.Excel.Application();特别相关,我一直在做的是在一个临时位置创建文件,我知道我没有任何权限问题。创建完文档后,我会将其移动到最终目的地,删除在临时位置创建的文件。

到目前为止,我还没有遇到任何问题。

我建议您创建一个日志文件,并按日期保存,它可以记录在整个代码中完成的步骤。这样你就可以看到它在哪里失败了。

如果可能的话,如果这是唯一需要excel的应用程序,请在excel上执行Process.Kill()。如果Excel.exe未正确关闭,这将有所帮助。

最后,如以上评论所述,不支持服务器上的Excel自动化。我建议您在SSIS中查找excel的自动化。

更新:

即使没有用户登录,也要确保测试应用程序是否运行。您可能需要设置Microsoft Excel的DCOM标识,使其以特定用户帐户而不是交互式用户的身份运行。

转到:

控制面板''所有控制面板项目''管理工具

点击

组件服务并导航到控制台根''组件服务''计算机''我的电脑'' DCOM配置'' Microsoft Excel应用程序

右键单击Microsoft Excel应用程序并选择属性

在"安全"选项卡下,设置为"对所有用户自定义",并允许访问Everyone(用于测试)

在"标识"选项卡下,设置This User并选择适当的帐户(与任务调度器用于运行应用程序的帐户相同)

祝你好运!

您检查过这是否是权限问题吗?您可能正在尝试将文件保存到某个位置,而.NET没有写入该位置的权限。