2013-10-21 34 views
0

我想創建一個有多個工作表的工作簿,但我正在儘快嘗試在工作簿中添加第6個工作表時發生COMException。 那麼有沒有辦法在工作簿中擴展工作表? enter image description here如何避免使用c#excel introp將多個工作表添加到工作簿時發生COMException?

+0

意味着你能夠添加5個工作表?顯示您如何添加工作表的代碼 –

+0

是否可以複製粘貼代碼... –

+0

沒有添加工作表的方法。我所要做的就是從這樣的工作簿中獲取工作表 m_ExcelSheet =(Excel._Worksheet)m_ExcelSheets.get_Item(++ m_CurrentWorkSheetInUse)); 如果我在循環中迭代執行它,一旦達到m_CurrentWorkSheetInUse = 5,就會拋出異常。 –

回答

3

如果您使用的是循環,讓您的工作在一個循環,不知道有多少張工作簿在那裏,那麼我會建議找總表在工作簿計數,然後循環,以獲得工作表對象

例如

int SheetCount = xlWorkBook.Sheets.Count;

會給你在該工作簿,你可以在使用For循環片材的數量。

如果你需要更多的工作表,那麼你可以使用xlexcel.Worksheets.Add來獲得更多的工作表。

跟進從評論:

我試過這種方法,並且是它不會引發異常,當我試圖從工作簿超越5工作表。但它覆蓋數據(我正在寫第6張紙)到第5張紙上,即使我嘗試在工作簿中添加一張後獲得第6張工作表。看起來下面的代碼片段返回第五個工作簿中的最後一個可用工作表。 m_ExcelSheet =(Excel._Worksheet)(m_ExcelSheets.get_Item(6));如何在添加新工作表後停止在第五個工作表中覆蓋數據? - saurabh.mridul 1分鐘前

增加一個工作表的語法是

expression.Add(Before, After, Count, Type) 

如果不指定在.Add然後工作表將作爲第一個工作表的paramenters。

當您在添加工作表而沒有指定參數後循環工作表時,worksheets(1)將成爲您添加的最新工作表。因此你的工作表5(現在工作表6)被覆蓋。

您需要指定添加的新工作表必須添加到現有工作表的末尾。的參數

  1. 之前

    描述:(可選)(數據類型:變型),它指定在添加新的片材之前的紙張的對象。

  2. 之後:(可選)(數據類型:變量)一個對象,用於指定添加新工作表之前的工作表。
  3. 計數 :(可選)(數據類型:變量)要添加的工作頁數。默認值是1。
  4. 類型 :(可選)(數據類型:變量)指定工作表類型。可以是以下XlSheetType常量之一:xlWorksheet,xlChart,xlExcel4MacroSheet或xlExcel4IntlMacroSheet。如果您要基於現有模板插入工作表,請指定模板的路徑。缺省值是xlWorksheet。

下面是如何在最後添加工作表的示例。

//~~> Add a new worksheet at the end of the worksheets 
xlWorkSheet = xlWorkBook.Sheets.Add(Type.Missing, xlWorkBook.Sheets[xlWorkBook.Sheets.Count], Type.Missing, Type.Missing); 
+0

是的,感謝您的幫助。 對不起,我沒有閱讀你的完整評論,因爲你正在談論我已經嘗試過的同樣的事情。 現在,我可以擴展到工作簿中的任意數量的工作表,具體取決於我的數據行嗎? –

+0

是的,你可以:)。如果您使用的是Excel 2007+,那麼工作表中的最大行數爲1048576。所以如果你有超過5242880(1048576 X 5)的行,那麼你將需要第6張表格。 –

+0

我試過這種方法,並且當我試圖從工作簿中獲取超出5的工作表時,它不會拋出異常。但它覆蓋數據(我正在寫第6張紙)到第5張紙上,即使我嘗試在工作簿中添加一張後獲得第6張工作表。看起來下面的代碼片段返回第五個工作簿中的最後一個可用工作表。 m_ExcelSheet =(Excel._Worksheet)(m_ExcelSheets.get_Item(6)); 如何停止在添加新工作表後覆蓋第五個工作表中的數據? –

相關問題