需求
最近工作中遇到一个需求, 用户频繁要求从后台批量导出大量数据目前的导出方式是使用 PL/SQL Developer 工具连接 Oracle 数据库, 编写 SQL 语句, 使用 PL/SQL Developer 工具自带的导出 Excel 文件的功能进行导出
编写 SQL 查询结果
2. 选择导出 Excel 文件
选择导出 Excel 文件时可以选择导出 XLSXLSX 两种格式的文件
遇到的问题:
当用户要求导出的数据条数太大, 超过 XLS 或者 XLSX 两种文件可以存储的最大行数时即导出失败为解决此问题, 特定开发 Oracle 数据导出工具, 用以支持大批量数据的导出工作
XLS 文件最大行数是: 65536
XLSX 文件的最大行数是: 1048576
基本构想
使用任一编程语言连接数据库并执行 SQL, 将查询结果分别写入 Excel 文件
存在两种实现方案:
使用 Java 语言连接数据库, 使用 POI 库写 Excel 文件
使用 C/C++ 语言开发桌面程序, 使用其他库写 Excel 文件
选择过程:
考虑到工具会提供公司内部其他同事使用, 加之对 Java 做界面不是很了解, 故放弃此方案 1, 采用方案 2 选定使用方案 2 后, 着手选择可使用的库及相关技术
关于存储文件的选择
直接写 Excel 文件: 写 Excel 文件时, 使用 LibXl 库, 当数据量比较大的时候, 会出现存盘失败的情况, 此种情况下只能减少写入 Excel 文件的行数如果查询结果的字段很多, 长度很长的情况下, 此种方案可保存的数据条数更少
写 Txt 文件:
写 Csv 文件:
写 Txt 文件和写 Csv 文件类似区别在于写 Txt 文件的时候, 使用 "\t" 分隔不同的字段, 而写 Csv 格式时, 使用 ","(逗号) 进行分隔
另外, 在写 Csv 和 Txt 格式的文件时, 由于用户可通过 Excel 打开则如果是数字, 并且以 0 开头的话, 需要添加号以标识此字段为文本
其他内容
选择 Duilib UI 库, 没有选择 MFC
选择 OCILib 访问和操作数据库 (希望可以专门写一遍笔记记录该库的使用方法)
使用 LibXl 库写 Excel 文件
操作流程
来源: http://www.bubuko.com/infodetail-2526690.html