【发布时间】:2011-09-28 19:33:21
【问题描述】:
我目前正在使用带有 C# COM Interop 的 Excel 2007 编写大约 200 个 Excel 电子表格。
不幸的是,我需要大约 4 分钟来写这 200 张纸 - 每张纸大约有 1000 行,8-10 列。
我怎样才能加快速度?
我的代码基本上是这样的:
var xlApp = new Excel.Application();
xlApp.DisplayAlerts=false;
foreach (x in z) {
var wb = xlApp.Workbooks.add(XLWBATemplae.xlWBATWorksheet);
var ws = (Worksheet)wb.Worksheets[1];
//fill data into sheet
wb.SaveAs(fileName);
wbClose();
}
澄清:我现在正在单独填充每个单元格
我会尝试你的一些建议,然后接受最好的解决方案。
【问题讨论】:
-
没有看到您的“填写数据表”代码(或至少是合理的传真),很难给出建议。
-
您正在使用进程外 COM,这会为每个单独的调用增加大量开销。一个简单的属性 getter 可以慢 10,000 倍。您可以通过最大限度地减少调用次数或在 Excel 中将代码作为加载项运行来加快速度。
-
为了操作 Excel,我退出了 .NET 并重新开始编写常规 COM 对象。总体而言,“用户可见”开销更少(UI 响应更快),因为调用进程中 COM 对象的方法只是一个虚函数调用。进程内 .NET 使用一些编组(并且您有 .NET 运行时开销),而进程外 .NET 非常慢。特别是当您使用大量方法调用时。如果您正在编写 Excel 工作表,为什么不直接编写它们呢?它们只是 XML 文件,应该很容易手动查看。
-
这基本上是 EPPlus 正在做的 - 因此它非常快。查看 XML 以手工制作它们需要的不仅仅是使用库。
标签: c# performance excel com-interop