• 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、注意计通比

  • 相关阅读:
    课程的添加与发布
    openlayers 框选得到在选框内的要素,并标注出这些要素的名称
    手写js前端分页功能实现
    eclipse安装html编辑器插件
    Redis持久化技术
    java获取指定时间
    java生成Cron表达式
    CentOS7 ifcfg-ens33(没有eth0网卡) 网卡配置 静态IP地址
    java代码关闭tomcat程序
    Tomcat控制台乱码问题
  • 原文地址:https://www.cnblogs.com/tigerlove/p/3151483.html
Copyright © 2020-2023  润新知