导出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、追求技术与解决问题的关系
在解决问题同等质量的情况下,采用简单的技术、自己顺手的技术。个人体会。
- 导出Excel的方法及困惑
- 导出excel的方法
- 导出excel的方法
- 导出excel的方法
- 导出excel的方法
- C++使用VS2010导出Excel的方法及步骤
- C++使用VS2010导出Excel的方法及步骤
- C++使用VS2010导出Excel的方法及步骤
- C++使用VS2010导出Excel的方法及步骤
- C++使用VS2010导出/导入Excel的方法及步骤
- C++使用VS2010导出Excel的方法及步骤
- C++使用VS2010导出Excel的方法及步骤
- C++使用VS2010导出Excel的方法及步骤
- VC2010环境OLE导出Excel的方法及步骤
- php 导出excel实现方法及代码
- 一般导出Excel的方法
- DATAGRID 导出EXCEL的方法
- 导入导出Excel的方法
- Http请求工具类HttpUtil
- 不同系统间的文件传输与打包压缩
- 基因芯片Pro-processions -------Bioconductor 安装包
- Excel工具类POIExcelUtil
- 设计模式学习笔记——解释器(Interpreter)模式
- 导出Excel的方法及困惑
- Cookie与Session
- Tomcat 7 的七大新特性
- Java设计模式(代理模式)
- CSS中伪元素 :before 和 :after 的使用
- 关于大型网站技术演进的思考(一)--存储的瓶颈(1)
- C# for和foreach解析
- 关于大型网站技术演进的思考(二)--存储的瓶颈(2)
- 关于大型网站技术演进的思考(二)--存储的瓶颈(3)*