Excel Interop遍历行并有条件地删除缺少某些行的整行

时间:2017-11-20 03:41:01

标签: c# .net excel automation office-interop

我正在构建一个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);

我需要知道有什么我错过了。谢谢你的帮助和时间。

1 个答案:

答案 0 :(得分:1)

非常确定蒂姆·威廉姆斯已经回答了你的问题,但我会在这个问题上加上一点澄清。

当你从上到下通过行列表运行for循环时,比如说,你在第10行,索引是10,它符合你要删除的条件,它将删除第10行,然后跳转在index = index + 1处行。

那就是问题出现的时候。当您在10处删除行时,它将其下面的所有行向上推一行,因此索引为11的行实际上是行12,而索引为11的旧行,现在是10的指数。

所以,是的,每当你使用删除时,无论是行还是列,总是自下而上。