大佬教程收集整理的这篇文章主要介绍了使用 ClosedXML 时 Excel 排序卡住,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有 14000 行的 xLSX。
我可以使用标准 Excel 应用程序在一秒钟内按列对其进行排序。
当我尝试在 ClosedXML
中做同样的事情时,它被卡住了。我的意思是它非常慢(比如 10 分钟或更长时间),但最终它完成了操作。
假设我创建了一个文件
XLWorkbook wb = new XLWorkbook();
IXLWorksheet ws = wb.AdDWorksheet("my test");
ws.Cell(1,1).Value = "A";
ws.Cell(1,2).Value = "B";
for (int i = 0; i < 14000; i++)
{
ws.Cell(i + 2,1).Value = i;
ws.Cell(i + 2,2).Value = i % 2;
}
wb.SaveAs("test.xLSX");
现在有几种方法可以按B列排序,例如
var tab = ws.Range(1,1,14001,2);
Stopwatch stopwatch = new Stopwatch();
Console.Writeline("start");
stopwatch.Start();
tab.SetautoFilter();
wb.SaveAs("test.xLSX");
ws.autoFilter.sort(2);
stopwatch.Stop();
Console.Writeline("Sorted after " + (int)stopwatch.Elapsed.@R_312_10586@lSeconds + " seconds");
wb.SaveAs("test.xLSX");
我应该切换到 @H_346_3@microsoft.office.Interop.Excel 以按列对表格进行排序吗?或者 ClosedXML
中是否有可用的方法?
是的,当然,Interop 更适合排序,在这种情况下它是即时的,而 ClosedXML 不可用。 这是示例代码
var excelApp = new Microsoft.office.Interop.Excel.Application();
// Make the object visible.
excelApp.Visible = true;
excelApp.Workbooks.Open(Path.Combine( Directory.GetCurrentDirectory(),"test.xLSX"));
Worksheet ws = (Worksheet)excelApp.ActiveSheet;
确保在上述之前使用 ClosedXML 创建电子表格(在这种情况下,它比互操作要快)。
最后是排序部分
var tab = (RangE)ws.Range[ws.Cells[2,1],ws.Cells[14001,2]];
Stopwatch stopwatch = new Stopwatch();
Console.WriteLine("start");
stopwatch.Start();
ws.Cells[1,2].AutoFilter();
tab.SELEct();
tab.Sort(ws.Cells[2,2],XlSortOrder.xlAscending);
Console.WriteLine("Sorted after " + (int)stopwatch.Elapsed.@R_312_10586@lSeconds + " seconds");
excelApp.ActiveWorkbook.Save();
excelApp.ActiveWorkbook.Close();
excelApp.Quit();
它需要一秒钟,正如预期的那样。
排序助手库shared
以上是大佬教程为你收集整理的使用 ClosedXML 时 Excel 排序卡住全部内容,希望文章能够帮你解决使用 ClosedXML 时 Excel 排序卡住所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。