在使用c#excel introp将多个工作表添加到工作簿中时,如何避免COMException?

时间:2013-10-21 10:45:23

标签: c# excel

我正在尝试创建一个包含多个工作表的工作簿,但是一旦我尝试在工作簿中添加第6个工作表,我就会收到COMException。 那么有没有办法在工作簿中扩展工作表? enter image description here

1 个答案:

答案 0 :(得分:3)

如果您使用循环将工作表放在循环中并且不确定工作簿中有多少工作表,那么我建议在该工作簿中查找总工作表数,然后循环以获取工作表对象

例如

int SheetCount = xlWorkBook.Sheets.Count;

将为您提供该工作簿中可以在For循环中使用的工作表数。

如果您需要更多工作表,则可以使用xlexcel.Worksheets.Add获取更多工作表。

来自评论的跟进:

  

我试过这种方法,是的,当我试图从工作簿中获得超过5的工作表时,它不会抛出异常。但是,即使我在工作簿中添加一个工作表后尝试获得第6个工作表,它也会覆盖数据(我正在为第6页编写)到第5页。似乎下面的代码片段返回第5个工作簿中的最后一个可用工作表。 m_ExcelSheet =(Excel._Worksheet)(m_ExcelSheets.get_Item(6));如何在添加新工作表后停止覆盖第5个工作表中的数据? - saurabh.mridul 1分钟前

添加工作表的语法是

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

如果您未在.Add中指定参数,则工作表将作为第一个工作表添加。

在添加工作表而不指定参数后循环工作表时,worksheets(1)将成为您添加的最新工作表。因此,您的工作表5(现在的工作表6)会被覆盖。

您需要指定必须在现有工作表的末尾添加要添加的新工作表。

参数说明

  1. 之前 :(可选)(数据类型:变体)一个对象,指定在添加新工作表之前的工作表。
  2. 之后 :(可选)(数据类型:变体)一个对象,指定在其后添加新工作表的工作表。
  3. 计数 :(可选)(数据类型:变体)要添加的页数。默认值为1。
  4. 类型 :(可选)(数据类型:变体)指定工作表类型。可以是以下XlSheetType常量之一:xlWorksheet,xlChart,xlExcel4MacroSheet或xlExcel4IntlMacroSheet。如果要基于现有模板插入工作表,请指定模板的路径。默认值为xlWorksheet。
  5. 以下是如何在最后添加工作表的示例。

    //~~> 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);