在20,000行Excel文件删除第一行时的Open XML SDK 2.0版性能问题
-
18-09-2019 - |
题
不要使用任何OpenXML的SDK V2.0在20,000行Excel文件删除第一行时遇到性能问题?
我使用删除行编码所建议的开放XML SDK文件内。我花了几分钟的时间只是使用的Open XML SDK删除第一行,但只需要短短第二Excel中的一个应用。
我最终发现该瓶颈实际上是在处理行删除气泡向上的方法。有许多行删除的行后更新。因此,在我的情况下,大约有20000行被更新,由行移位了的数据列。
我不知道是否有做的行删除任何更快的方法。
不要任何人有一个想法?
解决方案
那么,这里的坏消息是:是的,事实就是的
的方式。您可能会表现稍好移动SDK本身以外为System.IO.Packaging
,只是创造一个IEnumerable
/ List
像LINQ到XML的所有行,复制到没有第一排一个新的IEnumerable
/ List
,改写r
的<row r="?"/>
属性是它的位置在索引中,以及写入,超过现有孩子备份内<sheetData/>
。
您就需要那种做同样的任何字符串中的 sharedStrings.xml 的文件 - 即除去了被删除的行中的<ssi>.<si>
的元素,但在这种情况下,他们是现在隐含索引,所以你可以逃脱只是完全删除它们。
其他提示
解压缩文件,操纵它和重新包装它的做法是非常错误剪枝。
这个怎么样:如果你说,它在Excel中正常工作:您是否尝试过使用互操作?这将启动Excel的(可见或不可见),那么你就可以打开该文件,删除线,然后再次保存并关闭应用程序。一个新的实例
using System;
using System.IO;
using Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel;
public void OpenAndCloseExcel()
{
Excel.Application excelApp = new Excel.Application();
// Open Workbook, open Worksheet, delete line, Save
excelApp.Quit();
}
的范围内,目的是合格用于许多目的。还删除元素。看看: MSDN范围,说明。还有一个提示:互操作使用Excel中,因此所有的对象都与A-1开始的索引被不客气! 欲了解更多的资源来看看这个StackOverflow的线程。