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

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

当我在本地PC上运行它时,一切正常,并且它在服务器上的大部分时间都可以正常工作,但是一周一次或两次,我得到以下exception:

发生exception:System.Runtime.InteropServices.COMException(0x800A03EC):从HRESULT:0x800A03EC在Microsoft.Office.Interop.Excel.Workbooks.Open(String Filename,Object UpdateLinks,Object ReadOnly,Object Format,Object Password,Object WriteResPassword, Object IgnoreReadOnlyRecommended,Object Origin,Object Delimiter,Object Editable,Object Notify,Object Converter,Object AddToMru,Object Local,Object CorruptLoad)

这是一个代码片段:

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); 

我已经在网上阅读了很多东西,很多解决scheme都提到了安全设置,但是我不认为这是我的情况,否则它根本无法工作。 人们也提到了这个文件正在被腐化。 我真的不确定。 任何帮助将非常感激。

更新:

Excel安装在服务器上,当试图打开文件时发生exception。

运行> dcomcnfg

这将打开组件服务并导航到控制台根\组件服务\计算机\我的电脑\ DCOMconfiguration\ Microsoft Excel应用程序右键单击Microsoft Excel应用程序并select属性

点击标识标签并检查select。

它适用于我select选项 – 交互式用户

请尝试,最好的运气!

工作簿打开(strPath,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing ,Type.Missing,Type.Missing, Microsoft.Office.Interop.Excel.XlCorruptLoad.xlExtractData );

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

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

我build议你创build一个日志文件,并按date保存它,以便logging在代码中完成的步骤。 这样你可以看到失败的地方。

如果可能的话,在excel上执行Process.Kill() ,如果这是唯一需要excel的应用程序。 这有助于如果Excel.exe没有正确closures。

最后,如上述注释所述,服务器上的Excel自动化不受支持。 我会build议寻find自动化的Excel的SSIS。

更新:

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

去:

控制面板\所有控制面板项目\pipe理工具

点击

组件服务并导航到控制台根目录\组件服务\计算机\我的电脑\ DCOMconfiguration\ Microsoft Excel应用程序

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

在“安全性”选项卡下,设置为“全部自定义” ,并授予“ 所有人”权限(用于testing)

在“标识”选项卡下,设置“ 此用户”并select相应的帐户(与“任务计划程序”用于运行应用程序的帐户相同)

祝你好运!

你有没有检查是否是一个权限问题? 您可能试图将该文件保存到某个位置,而.NET没有写入该位置的权限。