2010-04-04 25 views
2

我想將數據寫入現有的excel文件(我很容易) 但我無法保存更改到excel文件中(實際上我看到了excel文件上的更改,但似乎打開,畢竟它發生了一些問題,如「文件已經具有相同名稱的打開等等...)插入數據後保存excel文件問題

Excel.Application app= new Microsoft.Office.Interop.Excel.Application(); 
     Excel.Workbook appbook= app.Workbooks.Open(appxls, 0, true, 5, "", "", false, Excel.XlPlatform.xlWindows, "\t", true, false, 0, true, Missing.Value, Missing.Value); 
     Excel.Sheets pages= appbook.Worksheets; 
     Excel.Worksheet page= (Excel.Worksheet)pages.get_Item(1); 

// ...我改變對excel文件中的一些價值觀和希望以保存它們: // appxls是持有路徑的字符串

appbook.SaveAs(appxls, Excel.XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing,false, Type.Missing, Excel.XlSaveAsAccessMode.xlShared, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
    appbook.Close(true, Missing.Value, Missing.Value); 
    app.Quit(); 

問題在哪裏,我如何使用Microsoft.interop解決它。

回答

3

您正在使用名爲'appxls'的文件名作爲只讀打開工作簿。 (該Workbooks.Open方法的ReadOnly參數是第三個參數,而你傳遞true。)

您以後使用Workbook.SaveAs方法,但正在嘗試使用您持相同確切的文件名「來保存文件您用來打開工作簿的'appxls'變量。這是試圖覆蓋已打開的只讀文件,因此被阻止。

我可以看到兩個可能的解決方案:

  1. 通行證在falseWorkbooks.Open方法的ReadOnly參數,以便您可以稍後使用Workbook.Save方法保存。在你的情況下,你可以通過撥打appbook.Save()來保存。

  2. 繼續以只讀方式打開文件,但當您稍後使用Workbook.SaveAs方法時,應將其保存在不同的名稱下。

希望這有助於!

+0

的感謝!這是與該問題的工作: 我去保存excel文件的位置,我打開excel文件和文件凍結:( – Cmptrb 2010-04-04 15:52:02

+0

保存也不完全工作。舊數據將被刪除:( – Cmptrb 2010-04-04 16:04:09

+0

好吧,對不起,在我原來的回答中,我錯過了你以只讀的方式打開文件,所以實際上有兩個問題需要解決,請參閱我的更新回答,上面... – 2010-04-04 16:17:37

-1

我試着使用OLEDB,是成功的與創建任何空的Excel文件中的代碼:

OleDbConnection connection= new OleDbConnection(connectionstring); 
    string addSheet= "CREATE TABLE Mus(id nvarchar(255), name nvarchar(5))"; 
    connection.Open(); 
    OleDbCommand sqlcommand = new OleDbCommand(addSheet,connection); 
    sqlcommand.ExecuteNonQuery(); 
    connection.Close(); 

其中ConnectionString的是:

string connectionstring = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\myexcel.xls;Extended Properties=""Excel 8.0;HDR=YES;"""; 

所以我有另一個proble與加插入和錯誤是:

「查詢值和目標字段的數量不相同」

我仔細寫了我的命令,我找不到錯誤:(我該如何解決它?

謝謝!

(這是我的工作ASPX重要的是,上面的代碼工作在桌面應用程序,但對於ASPX保存位置應該像responce.outstream不同的,因爲我從我的研究理解)

+0

不成功的操作。我解決了我的問題,對不起:(我的項目在插入命令和插入的項目是不同的。 – Cmptrb 2010-04-06 00:59:50