2012-12-13 181 views
1

我有這樣的代碼:用C#和Excel互操作工作

Microsoft.Office.Interop.Excel.Application xla = new Microsoft.Office.Interop.Excel.Application(); 
xla.Visible = false; 
Workbook wb = xla.Workbooks.Add(XlSheetType.xlWorksheet); 
Worksheet ws = (Worksheet)xla.ActiveSheet; 
ws.Name = "Serial"; 
int i = 1; 
foreach (DataRow comp in dsView.Tables[0].Rows) 
{ 
    ws.Cells[i, 1] = "'" + comp[0].ToString(); 
    ws.Cells[i, 2] = "'" + comp[1].ToString(); 
    ws.Cells[i, 3] = "'" + comp[2].ToString(); 
    i++; 
} 
if (File.Exists(@"d:\DDD.xlsx")) 
    File.Delete(@"d:\DDD.xlsx"); 
xla.Save(@"d:\DDD.xlsx"); ---->>>> on this line i get the error 

錯誤:

Exception from HRESULT: 0x800A03EC

我對C#工作與Office 2012

+1

請提供完整的堆棧跟蹤。也許文件名或路徑不存在或該文件正在被另一個程序使用。嘗試使用SaveAs代替保存。 –

+0

你/你的應用程序是否有權寫入這個文件夾? – efkah

+0

第一步直到此時運行代碼並嘗試手動保存。 – InContext

回答

1

您的問題是變量xla是你的excel應用程序,而不是工作簿。您想要保存工作簿。

所以

xla.Save(@"d:\DDD.xlsx"); ---->>>> on this line i get the error 

應該

wb.SaveAs(@"d:\DDD.xlsx", System.Reflection.Missing.Value,System.Reflection.Missing.Value,System.Reflection.Missing.Value, 
       System.Reflection.Missing.Value,System.Reflection.Missing.Value,Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,System.Reflection.Missing.Value, 
       System.Reflection.Missing.Value,System.Reflection.Missing.Value,System.Reflection.Missing.Value,System.Reflection.Missing.Value); 
+0

在我所有的excel互操作代碼中,我在工作簿上使用了save方法 – quip

+0

我用http://closedxml.codeplex.com/ – Gold

0

當我運行Excel.Application.Save()與Visual Studio 2010和Excel 2010的互操作(Office 14的)針對.NET 4中,它會顯示一個對話框,選擇一個位置保存文件。單擊該對話框上的取消會導致COM異常。但單擊保存有奇怪的結果:當我提供一個有效的文件路徑和名稱作爲參數如Excel.Application.Save(@"C:\blah.xlsx"),我最終保存了兩個文件。第一個名爲Sheet1.xlsx,包含我期望的內容,即使我沒有在對話框中選擇該名稱。另一個名爲blah.xlsx(根據我的文件名參數),並且無法在Excel中正確打開。如果我呼叫Excel.Application.Save()而沒有文件名作爲參數,則有效文件將與我在對話框中選擇的名稱和路徑一起保存,但我也會收到一個「RESUME.XLW」文件。所以看來Application.Save方法可能不是一個好的選擇。相反,你可以做這樣的事情,如你所料:

using System; 
using Excel = Microsoft.Office.Interop.Excel; 
namespace WindowsFormsApplication2 
{ 
    static class Program 
    { 
     static void Main() 
     { 
      Excel.Application xlApp = new Excel.Application(); 
      Excel.Workbook book = xlApp.Workbooks.Add(Excel.XlSheetType.xlWorksheet); 
      Excel.Worksheet sheet = book.ActiveSheet; 
      sheet.Name = "Booya"; 
      Excel.Range range = sheet.Cells[1, 1]; 
      range.Value = "This is some text"; 
      book.SaveAs(@"C:\blah.xlsx"); 
     } 
    } 
} 
+0

解決了這個問題而且這是因爲......而被低估的? –