2012-01-16 33 views
1
void excelsave() 
    { 
     try 
     { 
      ApplicationClass app = new ApplicationClass(); // the Excel application. 

      Workbook book = null; 
      Worksheet sheet = null; 
      Range range = null; 
      // the range object is used to hold the data 
      app.Visible = false; 
      app.ScreenUpdating = false; 
      app.DisplayAlerts = false; 

      string execPath = 
      Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase); 

      book = app.Workbooks.Open(@"E:\SSIS\ABC\Book1.xls", 
       Missing.Value, Missing.Value, Missing.Value, 
       Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
       Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
       Missing.Value, Missing.Value, Missing.Value); 
      sheet = (Worksheet)book.Worksheets[1]; 

      range = sheet.get_Range("A1", Missing.Value); 
      range.Columns.ColumnWidth = 22.34; 
      range = sheet.get_Range("B1", Missing.Value); 
      range.Columns.ColumnWidth = 22.34; 
      book.SaveAs(@"E:\SSIS\ABC\Book1.xls", Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
     } 
     catch (Exception ex) 
     { 

     } 
} 

在這裏,我打開一個Excel工作表試圖增加列的寬度,並需要作出列標題爲粗體並保存文件,現在的文件是沒有得到保存的Excel文件。我正在使用VS 2008,C#3.5保存在c#

有什麼我在這裏做錯了嗎?任何幫助,這將是偉大的 尋找解決方案

+7

你可以開始記錄任何excep而不是忽略它們在那個空的抓塊中! – 2012-01-16 02:14:17

+0

向我們展示您的ex.Message和ex.StackTrace,假設它引發異常。 – Brissles 2012-01-16 02:21:39

+0

你最好停止使用'Interop'並開始使用'excel-automation'。你的應用程序是一個「網絡應用程序」嗎? – gdoron 2012-01-16 02:30:10

回答

5

我運行以下使用VS 2010和.NET 4,但此代碼仍應該在您的環境中工作。另外,我簡化了你的代碼。希望這會讓你朝着正確的方向前進。

static void excelsave() 
    { 
     try 
     { 
      Application app = new Application(); 
      string execPath = 
       Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase); 

      Workbook book = app.Workbooks.Open(@"c:\test.xls"); 
      Worksheet sheet = (Worksheet)book.Worksheets[1]; 

      Range range = sheet.get_Range("A1"); 
      range.Columns.ColumnWidth = 22.34; 
      range = sheet.get_Range("B1"); 
      range.Columns.ColumnWidth = 22.34; 

      sheet.get_Range("A1", "B1").Font.Bold = true; 

      book.SaveAs(@"c:\test2.xls"); // or book.Save(); 
      book.Close(); 
     } 
     catch (Exception ex) 
     { 
     } 
    } 

UPDATE

你可以找到你在做什麼了類似的解釋/例如: http://www.dotnetperls.com/excel

Marshal.ReleaseComObject(book); // do this after the close 

此外,對清理Excel中的一個很好的討論/ COM ... How To Properly Clean Up Excel Interop Objects In c#