2017-09-15 137 views
0

当在我的C#代码,我首先打开一个Excel文件:的Excel COM调用异常SaveAs方法

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异常:

System.Runtime.InteropServices.COMException occurred 
ErrorCode=-2146827284 
HResult=-2146827284 
HelpLink=xlmain11.chm 
Message=Unable to access 'MyFile.xlsx'. 
Source=Microsoft Excel 

请注意,我没有与xlWorkBook.Save()方法相同的问题,但我需要将编辑后的文件保存在其他路径中,而不是覆盖它。

+0

那么你不能SaveAs到已经打开的文件。您需要关闭现有文件(将被覆盖)或保存到不同的名称。 –

+0

为什么我做不到? Save()方法允许保存到打开的文件中...... – KentuckyJack92

+0

@您需要检查是否存在任何具有相同名称的文件,并且如果在结尾添加了“2”并再次尝试,并且如果它存在,则再增加一个,直到找到一个不存在的名称,然后将其保存在该名称下。在VBA中,您可以使用函数DIR()来检索文件夹中的文件名 – Ibo

回答

0

您无法保存到打开的文件。你将不得不修改fileName,以便它指向另一个路径。

+0

请考虑添加一些代码示例。 – jfeferman