使用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,尝试打开文件时发生异常。
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没有写入该位置的权限。