0

我有一个大型 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)]

帮助!

4

1 回答 1

0

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

VSTO Excel:如何检查是否可以选择范围?

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]);
  }
}
于 2013-08-01T14:47:04.897 回答