【发布时间】:2019-11-15 00:31:07
【问题描述】:
我正在进行一个升级 WPF 程序的项目,该程序必须经常使用 Excel 工作表。它使用 Closedxml 和 Excel 互操作来操作 Excel 文件和添加数据。
经过一些跟踪,我发现了一个非常缓慢的函数。它使用与其他类似功能相同的方法,但其他一切都很好。问题是Closedxml.copyto() 消耗了 85% 的处理能力。
它的目的很简单,如果有新的记录需要打印,就以一张 Excel 表作为模板。它会将第一张工作表复制到新工作表,然后将数据写入其中。
如果您对如何加快这种过程有任何想法,请告诉我!
foreach (object[] row in rows)
{
if (Common.integer(row[0]) < from_no || Common.integer(row[0]) > to_no)
{
continue;
}
sheetNum++;
if (sheetNum != 1)
{
这部分使用了 85% 的进程功率
sheet_edit.CopyTo(sheetNum.ToString());
sheet_edit = book.Worksheet(sheetNum);
}
sheet_edit.Name = row[0].ToString();
ct.ThrowIfCancellationRequested();
w.ReportProgress(progCnt * 100 / maxCnt);
progCnt++;}
非常感谢!
PS:对不起我的英语不好!
PS:对于任何对我的问题投反对票的人,请告诉我原因?是没有帮助还是……其他原因?
PS:我搜索了一整天,但我找不到任何答案。有很多方法,但这些都不符合我的需要。
使用互操作:不是很快。
使用 openxml:这意味着我已经编写了更多代码,并且不太容易集成到这个程序中
使用 closedXML.copyRange:当然更快,但它不会复制列宽、行高……这意味着更多的代码、模式进程……所以不是更快。
我决定在循环中使用 diaogtics.process(print),第一张纸将在每个循环中重复使用。它有点快,但我们不能选择打印机或打印机设置...默认打印机和设置将自动使用。
我可以向我的客户解释这一点,我认为这是可以接受的。 但我还在等待答案..我碰巧知道如何加快这种流程,请告诉我!!
【问题讨论】:
-
您的意思是在同一个工作簿中复制工作表吗?或者您是否在复制工作簿本身,即文件?
-
如果您使用 ClosedXML,为什么还要使用 interop?这就是让你慢下来的原因
-
The problem is Closedxml.copyto() eats up 85% of processing power.仅当您在单核机器上工作时。此外,单线程操作在活动时会使用 100% 的 CPU,除非有东西中断它,例如 IO、Thread.Sleep() 等。 -
在一个案例中,发布您的代码。没有代码本身就不可能帮助解决代码问题。代码也比好英语好得多
-
嗨 JohnWu,我想在同一个工作簿中复制工作表,但它太慢了,我想让这个过程更快。