2013-08-27 128 views
6

我想修改和保存Excel中的數據。使用下面的代碼,我正在訪問表單,執行修改,然後保存文件。我無法保存該文件。這裏是我的代碼:無法保存Excel文件使用C#

Application excel = new Application(); 
     excel.Visible=true; 
     Workbook wb = (Workbook)excel.Workbooks.Open(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx"); 
     Worksheet ws = (Worksheet)wb.Worksheets[1]; 
     ws.Cells[1, 1] = "sagar"; 
     ws.Cells[2, 1] = "sagar"; 
     ws.Cells[3, 1] = "sagar"; 
     wb.Save(); 
     wb.close(); 

我收到此錯誤:「名爲‘BookExcel1.xlsx’已經存在該文件在此位置是否要取代它?」

所以我改變了代碼:

Workbook wb = (Workbook)excel.Workbooks.Open(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx",0, false, 5, "", "", 
      false, XlPlatform.xlWindows, "", true, false, 
      0, true, false, false);); 

然後錯誤是:「BookExcel1.xlsx由user_name.open只讀被修改」。如果單擊「取消」按鈕,我收到上面「從HRESULT異常:0x800A03EC」異常

我也曾嘗試:

wb.SaveAs(@"C:\Users\dnyanesh.wagh\Desktop\BookExcel1.xlsx"); 
wb.Close(true,null,null); 

從我收到同樣的錯誤,與上面的文件顯示修改。

任何人都可以告訴我如何保存修改的文件?

+0

別t真的知道,但只是一個快速的想法......你確定可以用'SaveAs'使用相同的文件路徑嗎?通常這會創建一個新文檔。有沒有一個'Save()'函數,而不是你可以使用? – musefan

+0

不要使其可見。 –

+1

我沒有看到你發佈創建的COM對象。記住始終發佈你創建/使用的每個Excel對象。如果出現錯誤並且未關閉工作簿,那麼可能會保持打開狀態,因此只能對新實例進行只讀操作...更多:excel未關閉(使用'excel.Quit()'),因此可以執行大量Excel進程在內存中... – Marco

回答

1

這是因爲我是想打開該文件已經在Excel應用程序打開。在我的代碼中,我沒有關閉某些條件的excel應用程序。這就是它以只讀權限打開它的原因。所以我無法在更新後保存該文件。要以讀寫方式打開它,您必須先關閉該文件。之後,您可以打開它並輕鬆地對文件執行讀取和寫入操作。

您可以關閉並看到所有已經打開的Excel的應用程序使用下面的代碼:

​​

在頂部,添加以下代碼,並參考Microsoft.Office.Interop.Excel

using Microsoft.Office.Interop.Excel; 
using System.Runtime.InteropServices; 
0

problem用於向後兼容的工作表(a .xls)而不是.xlsx。

To allow sheets to be opened in pre office 2007 version it can't contain more than 65k rows. You can check the number of rows in your sheet by using ctrl+arrowdown till you hit the bottom. If you try to get a range larger than that number of rows it will create an error

2

檢查您是否已經有Excel.exe進程運行。 另外,您應該打開工作簿,以便它可以編輯。

此代碼:

string txtLocation = Path.GetFullPath(InputFile); 

object _missingValue = System.Reflection.Missing.Value; 
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); 
Excel.Workbook theWorkbook = excel.Workbooks.Open(txtLocation, 
                 _missingValue, 
                 false, 
                 _missingValue, 
                 _missingValue, 
                 _missingValue, 
                 true, 
                 _missingValue, 
                 _missingValue, 
                 true, 
                 _missingValue, 
                 _missingValue, 
                 _missingValue); 

//refresh and calculate to modify 
theWorkbook.RefreshAll(); 
excel.Calculate(); 
theWorkbook.Save(); 
theWorkbook.Close(true); 
excel.Quit();