【问题标题】:Prompt message while trying to open an excel file尝试打开 Excel 文件时提示消息
【发布时间】:2012-11-26 09:04:47
【问题描述】:

我有一个打开 Excel 文件并读取内容的代码。每次我第一次运行代码时,它都会打开 Excel 文件而不提示我。但是从第二次开始它总是提示我这条消息

TestFile.xlsx 正在被用户 1 修改。以只读方式打开

它总是在这部分代码提示:

Excel ._Workbook  xlsBook = xlsApp .Workbooks.Open (_fileName,0,false,5 ,"","",false ,Excel .XlPlatform .xlWindows ,"",true ,false ,0,true ,false ,false );

注意:我也在操作完成后关闭文件并使用 VS 2012

那么这个提示可能是什么问题??

【问题讨论】:

  • 您打开文件一次,因为它不是共享的,当您尝试再次打开它时,您只能以只读方式打开它,因为一次只有一个用户可以编辑它。也许创建一个共享的 Excel 文件会对您有所帮助。 (Excel 基础)
  • 您是否再次打开该文件?还是您先关闭文件。如果您关闭了文件并收到此消息,则可能是时间问题(尤其是如果文件位于文件服务器上),其中(最近)关闭的文件尚未发布。你能忍受只读吗?否则请尝试添加暂停以提供文件释放的时间。

标签: c# excel io


【解决方案1】:

运行代码并退出后,查看任务管理器,很可能 EXCEL.EXE 实例仍在运行。

您很可能没有释放所有 com 对象,例如:

            System.Runtime.InteropServices.Marshal.ReleaseComObject(_theWorkbook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(_sheets);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(_workSheet);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(_range);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(_excelObj);

【讨论】:

    【解决方案2】:

    确保没有可以打开文件的资源。你能发布你用来关闭资源的代码吗?也许那里有错误。

    最后,尽管它很丑,但它对于测试目的是有效的:尝试在关闭文件后手动调用垃圾收集器。

    最后,考虑使用 OpenXml API 处理 Excel/Word 文件,而不是 Interop DLL(请记住,这些需要客户端安装 Excel,而不是您可以与应用程序一起部署的 OpenXml 库)。

    【讨论】:

      猜你喜欢
      • 2017-10-02
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      相关资源
      最近更新 更多