2012-01-16 65 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#