测试方法:填写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、注意计通比