导出Excel的方法及困惑

来源:互联网 发布:淘宝非实名认证手机卡 编辑:程序博客网 时间:2024/05/18 03:58

      我们在做项目时,难免要用到导出功能。将数据导出到Excel中做进一步加工,因为软件不可能把用户所有需求及后来的要求都做进去;多数情况下也不需要导出太多数据,如果数据导出太多就要调整需求。

     但无论如何总会有需要导出大数据的时候。比如要把销售明细导出给尼尔森、商务部的信息泵等,他们都需要的是大量的明细(要按店分明细,店号+条码)。

   1、用cxGrid

         当数据量小于65535时,可以导出为xls格式,没有问题。

        当数据量大于65535时,导出xlsx格式老出错。没有太深入去研究,感觉是xml操作实现方法的限制。

        uses cxGridExportLink;

  Screen.Cursor := crSQLWait;
  try
    ExportGridToXLSX(
'c:\test.xlsx', cxgrd1);
  finally
    Screen.Cursor := crDefault;
  end;

   2、用Ehlib

        导出xls,xlsx都正常。但xlsx格式时,超过40万(没有测试具体数据,只是大概)也有问题,程序好长时间没有响应。

       我修改了源代码,将其中的TStringStream替换成了TmemoryStream,速度快了很多。之前30分钟还导不完的数据,改后不到30秒就完成。

      uses DBGridEhImpExp;

      ExportDBGridEhToXlsx(DBGridEh1, 'Ehlib.xlsx', [xlsxDataAsDisplayText]);

   3、采用Ole方式操作Excel

       自己写了代码,虽然可以实现,但是速度太慢。后来在网上搜索‘DataSet分页导出到Excel(支持超过65536条记录)’,刚好找到一个写好的单元,一测试速度相当快,还可以支持按数据量分页,也可以一次导出多个数据集,并且可以按表格的宽度输出和显示进度。

      要求客户机必须安排Excel;再说了如果没有Excel,导出又有何用?

    4、还有其它导出控件

         有了方法3,尽量减少三方控件的使用。

备注:

      1、导出超过10万条数据,纯属测试,实际需要的可能性不大。

       2、写此文档,记录此事,改变思维。之前一直在追求所见所得,即能把界面上显示的效果(字体、宽度、颜色)也一并导出,所以一直在用cxGrid、Ehlib控件自身的导出功能,经过一天的测试,发现数据量小的时候都没有问题,一旦遇到大数据就不行了。追求导出效果相对数据的使用来说,并不重要;虽然用第3种方式导出的数据格式不好看,但是还原了事物本质:导出数据是为了对数据的再利用。

     3、追求技术与解决问题的关系

         在解决问题同等质量的情况下,采用简单的技术、自己顺手的技术。个人体会。

0 0
原创粉丝点击