我正在开发一个需要编辑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中提出了性能问题,但微软并没有承认这是事实。
感谢您的帮助!
答案 0 :(得分:0)
很难说如何在不看任何代码的情况下优化应用程序。 一种可能有用的方法是,您可以选择一个范围,而不是选择单个单元格。然后,您可以在c#代码中迭代数组,这比重复访问互操作更快。
我不确定为什么2013比2007慢,但是interops通常很慢,需要安装Excel才能使用。出于这些原因,我倾向于避免使用Interops。
由于Excel电子表格只是由XML组成,另一种解决方案可能是使用库自己编写XML。
OpenXML库显然是一个不错的选择,这里有一些有用的链接:
SDK - https://msdn.microsoft.com/en-us/library/office/bb448854.aspx
教程 - https://msdn.microsoft.com/en-us/library/office/hh180830%28v=office.14%29.aspx
但是我认为在OpenXML中执行宏可能很困难。但有人设法做到了:https://stackoverflow.com/a/21789643/3209889