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

我正在尝试创build一个有多个工作表的工作簿,但是我尽快尝试在工作簿中添加第6个工作表时遇到了COMException。 那么有没有办法在工作簿中扩展工作表? 在这里输入图像说明

如果您正在使用循环让工作表处于循环状态,并且不确定工作簿中有多less工作表,那么我会build议您在该工作簿中find总计表格计数,然后循环以获取工作表对象

例如

int SheetCount = xlWorkBook.Sheets.Count;

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

如果你需要更多的工作表,那么你可以使用xlexcel.Worksheets.Add来获得更多的工作表。

后续从评论:

我试过这种方法,是的,当我试图从工作簿中获取5以上的工作表时,不会抛出exception。 但它是覆盖数据(我正在写第六张)到第五张表,即使我尝试在工作簿中添加一个后获得第六个工作表。 看起来下面的代码片段返回第五个工作簿中的最后一个可用工作表。 m_ExcelSheet =(Excel._Worksheet)(m_ExcelSheets.get_Item(6)); 添加新工作表后,如何停止在第五个工作表中覆盖数据? – saurabh.mridul 1分钟前

添加工作表的语法是

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

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

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

您需要指定添加的新工作表必须添加到现有工作表的最后。

参数说明

  1. 之前 :(可选)(数据types:变体)指定添加新工作表之前的工作表的对象。
  2. 之后 :(可选)(数据types:变体)指定表单之后添加新工作表的对象。
  3. 计数 :(可选)(数据types:变体)要添加的工作页数。 默认值是1。
  4. types :(可选)(数据types:变体)指定表单types。 可以是以下XlSheetType常量之一:xlWorksheet,xlChart,xlExcel4MacroSheet或xlExcel4IntlMacroSheet。 如果要根据现有模板插入工作表,请指定模板的path。 默认值是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);