首页 > 解决方案 > 在 C# 桌面应用程序中使用 Office.Interop 库的 Find 方法从 Excel 工作表中删除多行花费了太多时间

问题描述

我正在使用 C# 桌面应用程序。我正在尝试删除在 Excel 工作表中多次出现的标题行。我发现我正在工作并从工作表中删除行的方法,但它们花费了太多时间。表格中的记录每个大约 6k 到 8k。下面是函数:

public void DeleteRow_GameDetailSheet(Excel.Worksheet clsWorksheet, string rowStartingWithString)
    {
        int rowIndex = 5;
        Excel.Range range = clsWorksheet.UsedRange;
        if (rowStartingWithString.Length > 0)
        {
            while (rowIndex >= 5)                                     
            {
                if (rowIndex >= 5)
                {
                    if(rowIndex==5)
                    {
                        ((Excel.Range)clsWorksheet.Rows[4, Type.Missing]).Delete();
                        ((Excel.Range)clsWorksheet.Rows[3, Type.Missing]).Delete();
                        ((Excel.Range)clsWorksheet.Rows[2, Type.Missing]).Delete();
                        ((Excel.Range)clsWorksheet.Rows[1, Type.Missing]).Delete();
                    }
                    else
                    {
                        ((Excel.Range)clsWorksheet.Rows[rowIndex, Type.Missing]).Delete();
                    }
                    if (rowIndex>5 && rowStartingWithString == "Club ID")
                    {
                        for (int i = 0; i < 8; i++)
                        {
                            rowIndex = rowIndex - 1;
                            ((Excel.Range)clsWorksheet.Rows[rowIndex, Type.Missing]).Delete();
                        }
                    }

                };
                rowIndex = FindRow(range, rowStartingWithString);
            }
        }
    }

  public int FindRow(Excel.Range range, String marker)
    {
        int row = -1;
        try
        {
           // row = range.Find(marker).Row;
            row = (int)(range.Find(marker)?.Row);
            return row;
        }
        catch (Exception ex)
        {
            row = -1;
            return row;
        }
    }

请有人建议我做错了什么,因为它花费了太多时间。完成该过程通常需要大约 15 到 25 分钟。任何帮助将不胜感激。谢谢

标签: c#.netexcelrowoffice-interop

解决方案


我看它并没有发现任何问题。但是只知道 Office 互操作非常慢。不要用它来处理大数据。根本不使用它

为此使用 ClosedXML。见答案

如何使用封闭式 XML 站点

string fileName = "C:\\Folder1\\Prev.xlsx";
 var workbook = new XLWorkbook(fileName);
 var ws1 = workbook.Worksheet(1);

我使用 Interop 来处理一个 18klines 和 150 列的文件。在我的笔记本电脑上花了将近 4 个小时。但使用 ClosedXML 只需不到 5 分钟。所以它在技术上应该加快你的方法。


推荐阅读