复制Excel工作表的最有效方法?

我正在一个项目上升级一个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:当然可以,但是它不会复制列的宽度,行的高度……这意味着需要更多的代码,模式过程……所以速度不是很快。

我决定在循环中使用dianogtics.process(print),第一张纸将在每个循环中重复使用。这种速度更快,但是我们不能选择打印机或打印机设置...默认打印机和设置将自动使用。

我可以向客户解释这一点,我认为这是可以接受的。 但是我仍在等待答案。.我碰巧知道如何加快这种过程,请让我知道!

wxm821016 回答:复制Excel工作表的最有效方法?

您可以使用Excel Interop来执行相同操作,而不是使用ClosedXml复制工作表。以下是用于复制工作表的示例代码

Excel.Application xlApp = Marshal.GetActiveObject("Excel.Application") as Excel.Application;
Excel.Workbook xlWb = xlApp.ActiveWorkbook as Excel.Workbook;
Excel.Worksheet xlSht = xlWb.Sheets[1];
xlSht.Copy(Type.Missing,xlWb.Sheets[xlWb.Sheets.Count]); 
xlWb.Sheets[xlWb.Sheets.Count].Name = "NEW SHEET";        
,

ClosedXML必须将每个对象(单元格,样式,图片等)从源复制到目标。如果您有成千上万的单元,那么这将消耗您的CPU周期。

您应确保源工作表仅包含您真正需要的单元格和样式。以我的经验,我看到了许多Excel模板,其中包含许多未使用的样式,并且在奇怪的工作表地址上包含空单元格。

如果我是您,我将尽可能在ClosedXML本身中重新创建模板(即使只是一次性的过程)。这将确保您的模板尽可能少。 ClosedXML尚不支持所有功能,因此在创建模板后,您可能需要添加元素(例如图表)。然后在进一步处理中使用该保存的模板。它应该比您现在使用的小得多,而且速度要快得多(我猜)。

您可以尝试使用的其他选项:.xlsx文件只是.zip程序包。您可以查看文件中的基础XML,并确定要复制多少个单元格或样式。

您还可以下载ClosedXML源,并精确地缩小占用资源的元素的类型。

免责声明:我是ClosedXML项目维护者。

本文链接:https://www.f2er.com/3098527.html

大家都在问