Excel VSTO范围删除循环随机停止工作

时间:2013-08-01 13:54:30

标签: c# vsto

我有一个大的VSTO应用程序,它接受命名范围并在其中添加行。然后一个工作表有一个按钮,它应该擦除命名范围内的所有行(但仍然保持范围不变)。但是,当我运行该循环时,它将随机停止工作。没有错误消息,没有警告,只是停止运行。删除了一些行但不是全部行,并且删除的行数似乎是随机的。我的代码很简单,唯一特别之处在于我希望前两行永不擦除。继承我的代码

Excel.Workbook wb = (Excel.Workbook)Globals.ThisWorkbook.InnerObject;
            Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets["MySheet"];
            Excel.Range rng = ws.get_Range("MyRange");

            int totalRun = 0;

            foreach (Excel.Range row in rng.Areas[1].Rows)
                {
                if(totalRun>1)
                    row.EntireRow.Delete(Excel.XlDirection.xlUp);

                totalRun++;
                }

正如你所看到的,我认为这个问题与区域或其他东西有关,只是给了我一个局部集,但似乎并非如此。我要删除的行是文本和数字的混合。同样,一些行删除但其他行不,它看似随机。范围增长到大约500行,这个循环将删除少至10%的行和高达75%的行

此外,由于代理错误消息,我已经更改了我的一个应用程序属性。我认为这也有助于此,但它没有 - 看起来像

[assembly: ExcelLocale1033(false)]

HELP!

1 个答案:

答案 0 :(得分:0)

我仍然不知道为什么上面的代码不起作用,但我使用了这个答案及其工作中的代码。奇

VSTO Excel: How to check whether a range can be selected?

for (int i = selectedRange.Rows.Count; i > 0; i--)
{
  firstSelectedItem = ((ExcelIntOp.Range)selectedRange.Cells[i, 1]);

  if (firstSelectedItem.Value2 != null)
  {
      firstSelectedItem.EntireRow.Delete(System.Type.Missing);
      firstSelectedItem = ((ExcelIntOp.Range)selectedRange.Cells[i, 1]);
  }
}