【发布时间】:2017-09-15 15:51:57
【问题描述】:
在我的 C# 代码中,我首先打开一个 Excel 文件:
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(modelFileName, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
然后我编辑它。
最后我将它保存在另一个名为 fileName 的路径中:
xlWorkBook.SaveAs(fileName);
问题是如果fileName对应一个打开的Excel文件,上面的指令会触发COM Exception:
System.Runtime.InteropServices.COMException occurred
ErrorCode=-2146827284
HResult=-2146827284
HelpLink=xlmain11.chm
Message=Unable to access 'MyFile.xlsx'.
Source=Microsoft Excel
请注意,xlWorkBook.Save() 方法没有相同的问题,但我需要将编辑后的文件保存在不同的路径中,而不是覆盖它。
【问题讨论】:
-
您不能将另存为已打开的文件。您需要关闭现有文件(随后将被覆盖)或另存为其他名称。
-
为什么我做不到? Save() 方法允许保存到打开的文件...
-
@你需要检查是否存在同名文件,如果有则在末尾加“2”再试一次,如果存在则再加一直到您找到一个不存在的名称并且您可以将其保存在该名称下。在 VBA 中,您可以使用函数 DIR() 检索文件夹中的文件名
标签: c# excel interop office-interop comexception