c# - 在 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 分钟。任何帮助将不胜感激。谢谢
解决方案
我看它并没有发现任何问题。但是只知道 Office 互操作非常慢。不要用它来处理大数据。根本不使用它
为此使用 ClosedXML。见答案
string fileName = "C:\\Folder1\\Prev.xlsx";
var workbook = new XLWorkbook(fileName);
var ws1 = workbook.Worksheet(1);
我使用 Interop 来处理一个 18klines 和 150 列的文件。在我的笔记本电脑上花了将近 4 个小时。但使用 ClosedXML 只需不到 5 分钟。所以它在技术上应该加快你的方法。
推荐阅读
- php - 如何在ckfinder中显示所有文件夹、子文件夹和文件
- javascript - 为什么我完成的种子(有时)没有写入磁盘?
- android - Android Studio:在回收站视图内的框架布局内绘制右上角的功能区和星号
- jupyter-notebook - 有谁知道为什么 Jupyter 笔记本快捷方式不起作用?
- php - 如何使用 PHP 将 / 之后的所有内容保存到变量中?
- web - ApiRTC“peertopeer_call”不在主机上工作
- node.js - Node.js:将缓冲区形式的 USB 流转换为字符串
- r - 如何从字符串中删除字符并只保留 R 中的数字?
- jsf - 如何在命令按钮单击时隐藏 p:面板
- ruby - 在 Windows 上的本地 bash ubuntu 上运行我的应用程序 ruby