VSTO Excel单元格填充的速度和效率问题

测试方法:填写10000个单元格内容为"asd"

 

方法序号 方法 时间(毫秒) 备注
1 循环赋值1万次this.Sheets["Sheet1"].Cells(i, 1).Value = "das"; 3500  
2 先定义一个Sheet,然后赋值为this.Sheets["Sheet1"].之后运行:
sheet.Cells[i, 1].Value= "das";
3500 速度一样
3 this.Sheets["Sheet1"].Range("A"+i).Value = "das"; 3200 Range比Cells快一点
4 先存在数组x里面,再区域赋值:
String[] x = new String[10000];
            for (int i = 0; i < 10000; i++) { x[i] = "das"; }
            this.Sheets[1].Range("A1: A10000").Value = this.Sheets[1].Application.Transpose(x);
80 这种方式最快,注意excel中将数组看做一行数据,如果需要将数组赋值给列,则要调用Application.Transpose

 

提高速度,应该遵循以下几个原则:

1、减少对象的访问(包括属性的读取和写入)
例如处理表格时先将区域读取到二维数组里面,修改数组后,再将数组整体赋值给区域
2、关闭屏幕刷新
 S1.Chart.ChartData.Workbook.Application.Visible = false;
           S1.Chart.ChartData.Workbook.Application.ScreenUpdating =false;
3、减少循环(总运算次数)
4、减少某些内置函数的使用,尽量用基本的运算符
5、减少数组元素的访问(需要多次访问同一数组元素的,可以用临时变量代替)
6、注意计通比

posted @ 2013-06-23 19:50  爱老虎  阅读(1028)  评论(0编辑  收藏  举报