2011-11-09 28 views
9

我想創建一個Excel文件與C#COM互操作,但似乎它創建它默認與3張而不是空或只有一個。 什麼是需要創建空或只是一個:C#創建Excel工作簿默認1張

Excel.Application xl = null; 
Excel._Workbook wb = null; 

// Create a new instance of Excel from scratch 
xl = new Excel.Application(); 
xl.Visible = true;  
wb = (Excel._Workbook)(xl.Workbooks.Add(Missing.Value)); 

wb.SaveAs(@"C:\a.xls", Excel.XlFileFormat.xlWorkbookNormal, 
null, null, false, false, Excel.XlSaveAsAccessMode.xlShared, 
false, false, null, null, null); 
+2

我覺得這是Excel的默認行爲。如果你打開excel並創建一個新文檔,它有三張表。也許你只需要刪除表單二和三。 –

+0

或者您可以嘗試一下簡單而便利的圖書館NPOI http://code.google.com/p/npoi/,它爲您提供了很多靈活性,尤其是對於基本到中級的Excel功能。如果只需要從Office 2010或更高版本打開輸出,則還可以考慮使用OpenXML。 COM Interop可能會在無人照管的非交互式客戶端應用程序中給您帶來很多問題。看到這個http://support.microsoft.com/kb/257757 –

回答

20

看看的Workbooks.Add Method MSDN的解釋。

  1. 嘗試Workbooks.Add(XlWBATemplate.xlWBATWorksheet),或
  2. 看看你是否可以在xl.SheetsInNewWorkbook屬性設置爲0或1。

我繼續驗證了這一點。下面是代碼:

using Microsoft.Office.Interop.Excel; 
using System.Reflection; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Application xl = null; 
      _Workbook wb = null; 

      // Option 1 
      xl = new Application(); 
      xl.Visible = true; 
      wb = (_Workbook)(xl.Workbooks.Add(XlWBATemplate.xlWBATWorksheet)); 

      // Option 2 
      xl = new Application(); 
      xl.SheetsInNewWorkbook = 1; 
      xl.Visible = true; 
      wb = (_Workbook)(xl.Workbooks.Add(Missing.Value)); 

     } 
    } 
} 
+3

我使用了選項2:「xl.SheetsInNewWorkbook = 1」,這就解決了這個問題。 – Moti

+0

@Moti,很高興幫助。在這裏看到你的新人,如果答案是正確的,習慣上接受答案(勾選複選標記)。另外有用的答案也可以投票(向上箭頭)。 :) – Matt

+0

似乎至少8小時我無法回答這個問題,因爲我有「•名聲不到100的用戶在詢問後8小時內無法回答自己的問題,您可以在7小時內自行回答。在此之前請使用評論,或者編輯你的問題「。 – Moti

2
Excel.Application xl = null; 
Excel._Workbook wb = null; 

xl = new Excel.Application(); 
xl.SheetsInNewWorkbook = 1; 
xl.Visible = true; 

wb = (_Workbook)(xl.Workbooks.Add(Missing.Value)); 
相關問題