本帖最后由 李泽勇2 于 2020-3-22 19:15 编辑
使用libxl.dll插件可快速导入导出Excel文件,比系统自带的组件导出快N多倍,支持2007、2010、2016等文件。完全脱离office环境,独立运行。
这个插件是论坛里网友分享的,我就拿来写了几个例子,并做成了模块,源码一同分享给大家。这次新增了高级表格的导入和导出,并且我写了一个演示例子,喜欢折腾的朋友拿去改进下吧,基本用还是没问题的。
增加了 [指定字段] 的导出,这样更灵活了。
附件在这里:
libxl.dll插件快速从数据库导出.7z
(1019.24 KB, 下载次数: 3264)
补充内容 (2020-4-11 20:37):
发现无法识别的加固段,需要安装最新的 易语言助手
补充内容 (2020-6-16 08:49):
.版本 2
.支持库 eGrid
.子程序 Excel导出_高级表格, 逻辑型, 公开
.参数 高级表格_, 高级表格, 可空, 高级表格
.参数 进度条_, 进度条
.参数 表头, 文本型, 数组, {“列1”,“列2”}
.参数 工作表名, 文本型
.参数 列宽, 整数型, 可空 数组, {19,19}默认全部19
.参数 路径, 文本型, , Excel保存路径\理论支持( 2007、2010、2016)格式文件
.局部变量 句柄, 整数型
.局部变量 总数, 长整数型
.局部变量 a, 整数型
.局部变量 b, 整数型
.局部变量 c, 整数型
.局部变量 d, 整数型
.局部变量 e, 文本型
.局部变量 f, 整数型
.局部变量 终止列, 整数型
.局部变量 qq, 整数型
总数 = 高级表格_.行数 - 1
句柄 = 初始化_ ()
c = xlBookInsertSheetA (句柄, xlBookSheetCountA (句柄), 取文本指针 (工作表名), 0)
a = xlBookAddFormatA (句柄, 0)
xlFormatSetBorderA (a, 1)
.计次循环首 (取数组成员数 (表头), b)
xlSheetWriteStrA (c, 0, b - 1, 取文本指针 (表头 ), a)
.计次循环尾 ()
进度条_.位置 = 0
进度条_.最大位置 = 总数
终止列 = 取数组成员数 (表头)
.如果真 (是否为空 (列宽))
.计次循环首 (终止列, )
加入成员 (列宽, 19)
.计次循环尾 ()
.如果真结束
.计次循环首 (总数, d)
.计次循环首 (终止列, b)
e = 高级表格_.取shuj (d, b - 1)
xlSheetWriteStrA (c, d, b - 1, 取文本指针 (e), a)
.计次循环尾 ()
进度条_.位置 = d
.计次循环尾 ()
xlSheetAddIgnoredErrorA (c, 0, 0, d, b, 255) ' 添加表格忽略错误
.计次循环首 (取数组成员数 (列宽), qq)
xlSheetSetColA (c, qq - 1, qq - 1, 列宽 [qq], 0, 0) ' 调整列宽
.计次循环尾 ()
f = xlBookSaveA (句柄, 取文本指针 (路径))
xlBookReleaseA (句柄)
返回 (f = 1)
补充内容 (2020-6-16 08:50):
修复从高级表格里导出表头问题。
补充内容 (2020-8-6 15:10):
不想默认19列宽的同志可以将:加入成员 (列宽, 19) 修改成 加入成员 (列宽, -1) 可以实现自动调整列宽
补充内容 (2020-8-12 08:33):
超过进度条的最大位置32767后只会显示进度条的最大数,超过就不准的问题
只需要把进度条的最大位置÷ 100和进度条的位置÷ 100就可以解决。
补充内容 (2020-10-12 14:01):
.版本 2
.支持库 eGrid
.子程序 Excel导出_高级表格, 逻辑型, 公开
.参数 高级表格_, 高级表格, 可空, 高级表格
.参数 进度条_, 进度条
.参数 表头, 文本型, 数组, {“列1”,“列2”}
.参数 工作表名, 文本型
.参数 列宽, 整数型, 可空 数组, {19,19}默认全部19
.参数 路径, 文本型, , Excel保存路径\理论支持( 2007、2010、2016)格式文件
.局部变量 句柄, 整数型
.局部变量 总数, 长整数型
.局部变量 a, 整数型
.局部变量 b, 整数型
.局部变量 c, 整数型
.局部变量 d, 整数型
.局部变量 e, 文本型
.局部变量 f, 整数型
.局部变量 终止列, 整数型
.局部变量 qq, 整数型
总数 = 高级表格_.行数 - 1
句柄 = 初始化_ ()
c = xlBookInsertSheetA (句柄, xlBookSheetCountA (句柄), 取文本指针 (工作表名), 0)
a = xlBookAddFormatA (句柄, 0)
xlFormatSetBorderA (a, 1)
.计次循环首 (取数组成员数 (表头), b)
xlSheetWriteStrA (c, 0, b - 1, 取文本指针 (表头 ), a)
.计次循环尾 ()
进度条_.位置 = 0
进度条_.最大位置 = 总数
终止列 = 取数组成员数 (表头)
.如果真 (是否为空 (列宽))
.计次循环首 (终止列, )
加入成员 (列宽, -1)
.计次循环尾 ()
.如果真结束
.计次循环首 (总数, d)
.计次循环首 (终止列, b)
e = 高级表格_.取数据 (d, b - 1)
xlSheetWriteStrA (c, d, b - 1, 取文本指针 (e), a)
.计次循环尾 ()
进度条_.位置 = d
.计次循环尾 ()
xlSheetAddIgnoredErrorA (c, 0, 0, d, b, 255) ' 添加表格忽略错误
.计次循环首 (取数组成员数 (列宽), qq)
xlSheetSetColA (c, qq - 1, qq - 1, 列宽 [qq], 0, 0) ' 调整列宽
.计次循环尾 ()
f = xlBookSaveA (句柄, 取文本指针 (路径))
xlBookReleaseA (句柄)
返回 (f = 1)
|