我正在构建一个excel自动化程序,我需要有条件地删除特定的行。举个例子,我有224行特定的发布者。在224行中,160行无效,我需要删除160.但是当我遍历行并有条件地删除160行时,只删除了138行。工作表中始终保留22行。我找不到原因是什么?代码如下。
List<string> removeList = listofRemovalOfSpecificPublishers;
string path = "C:\\Library Automation\\Source\\publishers.xlsx";
var workBookData = GetWorkBookData(path, "Booking Publishers Info");
mWSheet1 = workBookData.mWorkSheet1;
Microsoft.Office.Interop.Excel.Range xlRange;
xlRange = mWSheet1.UsedRange;
for (int i = 1; i <= xlRange.Rows.Count; i++)
{
string publisher = Convert.ToString(xlRange.Cells[i, 3].Value); //publisher column
string bookState = Convert.ToString(xlRange.Cells[i, 8].Value); //status column
if (carrier != "Publisher" && Convert.ToString(xlRange.Cells[i, 1].Value) != "Status")
{
if (removeList.Contains(publisher) && bookState == "INVALID")
{
xlRange.Cells[i, 1].EntireRow.Delete(null);
}
}
}
workBookData.mWorkbook.RefreshAll();
workBookData.mWorkbook.Save();
workBookData.mWorkbook.Close(Missing.Value, Missing.Value, Missing.Value);
我需要知道有什么我错过了。谢谢你的帮助和时间。
答案 0 :(得分:1)
非常确定蒂姆·威廉姆斯已经回答了你的问题,但我会在这个问题上加上一点澄清。
当你从上到下通过行列表运行for循环时,比如说,你在第10行,索引是10,它符合你要删除的条件,它将删除第10行,然后跳转在index = index + 1处行。
那就是问题出现的时候。当您在10处删除行时,它将其下面的所有行向上推一行,因此索引为11的行实际上是行12,而索引为11的旧行,现在是10的指数。
所以,是的,每当你使用删除时,无论是行还是列,总是自下而上。