问题描述
我正在使用 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。见asnswer
string fileName = "C:\\Folder1\\Prev.xlsx";
var workbook = new XLWorkbook(fileName);
var ws1 = workbook.Worksheet(1);
我使用 Interop 处理了一个 18klines 和 150 列的文件。在我的笔记本电脑上花了将近 4 个小时。但是使用 ClosedXML 只需不到 5 分钟。所以它在技术上应该可以加快你的方法。