2017-09-15 135 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