使用COM组件的方式向Excel中写入数据。把从DataTable获取的所有的数据都保存在了一个二维数组中,object[,] arrayList = new object[tableNPCC.Rows.Count, tableNPCC.Columns.Count];
//这里都是赋值操作Range newRangeArea = sheet.Range[sheet.Cells[2, 1], sheet.Cells[arrayList.GetLongLength(0) + 1, arrayList.GetLength(1)]];
newRangeArea.Value2 = arrayList;但是在执行的时候,速度非常慢,而且去查看Excel进程,会发现Excel进程正在以没秒钟8KB左右的速度增加内存,貌似说明程序正在向Excel文件写入内容。但是这样速度太慢了啊,有2万多条数据,好长时间都没写完。有没有什么高效的方法?

解决方案 »

  1.   

    项目已经做了很久了,现在换用其他技术基本不考虑了。我发现,貌似Excel是shared模式,同时用的人越多,写入的越慢。
      

  2.   

    项目已经做了很久了,现在换用其他技术基本不考虑了。我发现,貌似Excel是shared模式,同时用的人越多,写入的越慢。“貌似Excel是shared模式,同时用的人越多,写入的越慢。”
    什么意思 难道你们还需要异步并行写入吗?写excel又不会涉及到与其他模块很多的交互,
    就两步,拿到数据,写入excel。
    又不会对其他部分有影响,你部分更换模块都行啊。
    数据量大的 用npoi ,数据少的 还是用以前的。
      

  3.   

    项目已经做了很久了,现在换用其他技术基本不考虑了。我发现,貌似Excel是shared模式,同时用的人越多,写入的越慢。“貌似Excel是shared模式,同时用的人越多,写入的越慢。”
    什么意思 难道你们还需要异步并行写入吗?写excel又不会涉及到与其他模块很多的交互,
    就两步,拿到数据,写入excel。
    又不会对其他部分有影响,你部分更换模块都行啊。
    数据量大的 用npoi ,数据少的 还是用以前的。在做这个项目之前,我也不知道Excel竟然有多人共享模式。就是说,局域网中的多台电脑可以同时打开一个共享目录中的Excel文件,然后Excel能够Merge这些编辑的内容。npoi由于不用调用COM组件,是不是很快啊?
      

  4.   

    npoi由于不用调用COM组件,是不是很快啊?貌似是因为com的消息机制的问题?大数据确实很成问题,太底层的不明白,
    但npoi非常快,把office com秒出翔,是毫无疑问的。“然后Excel能够Merge这些编辑的内容。”
    这点不理解,你确定不是使用加锁同步的方式,而是Merge写入的内容?
    要是内容冲突呢?