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

Excel Interop iterate through rows and conditionally delete entire row missing some rows

我正在构建一个 excel 自动化程序,我需要有条件地删除特定行。例如,我有 224 行特定发布者。在那 224 行中,有 160 行无效,我需要删除那 160 行。但是当我遍历行并有条件地删除那 160 行时,只有 138 行被删除。 sheet 中始终保留 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);

我需要知道我有什么东西可以 missed.Thank 你的帮助和时间。

很确定 Tim Williams 已经回答了你的问题,但我会就此事做一些澄清。

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

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

所以,是的,无论何时处理删除,无论是行还是列,始终自下而上。