【发布时间】:2015-06-25 20:08:12
【问题描述】:
我正在开发一个应用程序,该应用程序需要编辑一个执行各种操作的 excel 文件,例如:
- 将粘贴部分从工作表复制到工作表
- 添加/编辑值
- 公式和宏在后台运行
这是一个最初使用 Excel 2007 开发的应用程序,但我现在必须使用 Excel 2013。不幸的是,我注意到在安装了 Excel 2013 而不是 Excel 2007 的机器上运行时,它几乎慢了 10 倍。
因此,我创建了一个非常简单的基准测试应用程序,它随机生成数字并将它们写入 1000(行)* 15(列)= 15000 个单元格中。
结果令人失望,因为在 Excel 2007 中运行大约需要 670 毫秒,在 Excel 2013 中运行大约需要 3257 毫秒。(这慢了 5 倍)
请找到给出上述基准测试结果的代码:
static void Main(string[] args)
{
var stopwatch = new Stopwatch();
stopwatch.Reset();
stopwatch.Start();
var excel = new Application();
excel.Visible = false;
excel.DisplayAlerts = false;
var workbooks = excel.Workbooks;
var workbook = workbooks.Add(Type.Missing);
var worksheets = workbook.Sheets;
var worksheet = (Worksheet)worksheets[1];
WriteArray2(1000, 15, worksheet);
workbook.SaveAs(@"c:\temp\Speedtest.xlsx");
excel.Quit();
stopwatch.Stop();
Console.WriteLine("Time elapsed (milliseconds): "+(stopwatch.ElapsedMilliseconds).ToString());
Console.ReadLine();
return;
}
private static void WriteArray2(int rows, int columns, Worksheet worksheet)
{
var data = new object[rows, columns];
Random r = new Random();
for (var row = 1; row <= rows; row++)
{
for (var column = 1; column <= columns; column++)
{
data[row - 1, column - 1] = r.NextDouble()*2000000-1000000;
}
}
var startCell = (Range)worksheet.Cells[1, 1];
var endCell = (Range)worksheet.Cells[rows, columns];
var writeRange = worksheet.Range[startCell, endCell];
writeRange.Value2 = data;
}
}
您在使用 Excel 2013 时遇到过类似问题吗? 您知道我可以尝试优化 Excel 2013 吗?
我知道有些人在 Excel 2013 中提出了性能问题,但 Microsoft 并未承认这是事实。
感谢您的帮助!
【问题讨论】:
-
能不能展示下慢的代码?
-
你最后需要多长时间?
-
热启动为:在 Excel 2013 中运行 3257 毫秒,在 Excel 2007 中运行 670 毫秒。
-
如果省略应用程序启动时间,那需要多长时间?你有插件在运行吗?
-
所以2007现在变慢了,你在2013的启动中收获很多。那么关键问题不是启动时间吗?
标签: c# .net excel office-interop excel-interop