2011-08-10 94 views
11

我必須創建一個將數據集導出到Excel的控制檯應用程序。我試着用Google搜索並查看關於這個主題的帖子,但還沒有真正找到我要找的東西。問題是它不應該彈出保存窗口,它應該自動創建excel文件。到目前爲止,我有以下代碼,但我不知道如何使它自動保存。將不勝感激任何幫助。Excel interop:在不顯示保存對話框的情況下保存工作簿

public static void CreateWorkbook(DataSet ds, String path) 
    { 
     int rowindex = 0; 
     int columnindex = 0; 

     Microsoft.Office.Interop.Excel.Application wapp = new Microsoft.Office.Interop.Excel.Application(); 
     Microsoft.Office.Interop.Excel.Worksheet wsheet; 
     Microsoft.Office.Interop.Excel.Workbook wbook; 

     wapp.Visible = false; 

     wbook = wapp.Workbooks.Add(true); 
     wsheet = (Worksheet)wbook.ActiveSheet; 

     try 
     { 
      for (int i = 0; i < ds.Tables[0].Columns.Count; i++) 
      { 
       wsheet.Cells[1, i + 1] = ds.Tables[0].Columns[i].ColumnName; 

      } 

      foreach (DataRow row in ds.Tables[0].Rows) 
      { 
       rowindex++; 
       columnindex = 0; 
       foreach (DataColumn col in ds.Tables[0].Columns) 
       { 
        columnindex++; 
        wsheet.Cells[rowindex + 1, columnindex] = row[col.ColumnName]; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      String err = ex.Message; 
     } 
     wapp.UserControl = true; 
    } 

回答

24

的參數全部以WorkBook.SaveAs()是可選的,但你可以只使用Type.Missing其中大部分,如果你想。

典型的通話將如下所示:

wbook.SaveAs("c:\\temp\\blah", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, 
      false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
wbook.Close(); 

請注意,我不包括文件擴展名,Excel將設置爲您服務。

http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.saveas(v=VS.100).aspx描述了每個參數。

+0

謝謝查爾斯,那工作:) – ha1ogen

5

嘗試調用工作簿的SaveAs方法。對於大量參數,嘗試將Type.Missing傳遞給除第一個(文件名)之外的所有參數。

+0

亞我試過,但它需要這麼多: 參數無效另存爲(目標文件名,對象的FileFormat,對象密碼,對象WriteResPassword,對象ReadOnlyRecommended,對象CreateBackup,XlSaveAsAccessMode AccessMode,反對衝突解決,反對AddToMru,對象TextCodepage,對象TextVisualLayout ,object Local); ,我不知道如何使用它... – ha1ogen

+0

我認爲只有前兩個是強制性的,所有其他可以用作缺少參數。 –

+0

那麼「對象文件名」是什麼?你可以給我一個例子 – ha1ogen

2

使用open xml sdk來生成文檔而不是自動化;它更可靠。

+0

你可以請更多的細節到響應和解決方案 –

2

使用DisplayAlerts屬性。它非常簡單和快速。

private void SaveAs(Excel.Workbook WorkBook, string FileName) 
    { 
     m_Saving = true; 
     try 
     { 
      if (Global.CreatingCopy) 
       this.ExcelApp.DisplayAlerts = false; 

      WorkBook.SaveAs(FileName); 
     } 
     finally 
     { 
      m_Saving = false; 
      if (this.ExcelApp.DisplayAlerts == false) 
       this.ExcelApp.DisplayAlerts = true; 
     } 
    } 

決不要讓Excel在保存文件時定義文件的種類。因爲格式可能會改變。

如果原始文檔是.xls,並且當前用戶具有office 2013默認格式的.xlsx,然後Excel會將該文件轉換爲.xlsx,並且用戶沒有Excel 2010或上級無法打開該文件。

4
m_xlApp.DisplayAlerts = false; 

// Quit Excel and clean up. 
m_xlWorkbook.SaveAs(Filename: m_xlFilePath, FileFormat: excelFileExtension, 
Password: false, ReadOnlyRecommended: XlSaveAsAccessMode.xlNoChange, 
ConflictResolution: XlSaveConflictResolution.xlLocalSessionChanges); 

m_xlWorkbook.Close(); 

添加解決衝突XlSaveConflictResolution.xlLocalSessionChanges

和應用程序的DisplayAlerts屬性設置爲false,那麼窗口將不會顯示。

有關更多信息,請參閱https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.xlsaveconflictresolution.aspx

相關問題