繁体   English   中英

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

[英]Exception When Opening Excel File in C# Using Interop

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

当我在我的本地PC上运行时,一切正常,它大部分时间都在服务器上工作,但也许每周一次或两次我得到这个例外:

发生异常:System.Runtime.InteropServices.COMException(0x800A03EC):来自HRESULT的异常:0x800A03EC at 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);

我在线阅读了很多东西,很多解决方案都提到了安全设置,但我不认为这是我的情况,否则它根本不会起作用。 人们还提到文件已损坏。 我真的不确定。 任何帮助将非常感激。

更新:

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

运行> dcomcnfg

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

单击“标识”选项卡并选中选项。

当选择选项 - 交互式用户时,它适用于我

请试试,祝你好运!

.Workpens.Open(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(); 而我一直在做的是在临时位置创建文件,我知道我没有任何权限问题。 完成创建文档后,我将其移动到最终目标,删除在临时位置创建的文件。

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

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

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

最后,如上面的注释中所述,不支持服务器上的Excel自动化。 我建议查看SSIS以获得excel的自动化。

更新:

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

去:

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

点击

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

右键单击Microsoft Excel Application,然后选择“ 属性”

在Security选项卡下,设置为allize on all并授予Everyone访问权限(用于测试)

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

祝好运!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM