我有一个大的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!
答案 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]);
}
}