当前位置: 首页 > news >正文

用SQL实现对DuckDB rusty_sheet插件批量测试

张泽鹏先生写的插件,我来给他做测试,在网上找到一个https://github.com/jmcnamara/libxlsxwriter工具库自带好多例子xlsx文件,但是文件很多,测试很费事,能否批量测试?当然可以,依靠duckdb的glob函数我们很容易写出以下语句

select 'copy(from read_sheet('''||file||''')) to '''||replace(file,'.xlsx','.xls')||''';' from  glob('.\libxlsxwriter\test\functional\xlsx_files\*.xlsx') limit 2;

运行该查询,返回两行数据,每行都是一个查询read_sheet()的语句:

copy(from read_sheet('.\libxlsxwriter\test\functional\xlsx_files\array_formula01.xlsx')) to '.\libxlsxwriter\test\functional\xlsx_files\array_formula01.xls';
copy(from read_sheet('.\libxlsxwriter\test\functional\xlsx_files\array_formula02.xlsx')) to '.\libxlsxwriter\test\functional\xlsx_files\array_formula02.xls';

只要把该语句的输出写入一个脚本文件,用.read命令读入脚本就实现了全自动测试,为了防止存在相同的列标题报错,加入header=0参数。

完整语句如下:

.header off
.mode list
.output out.txtselect 'copy(from read_sheet('''||file||''',header=0)) to '''||replace(file,'.xlsx','.xls')||''';' from  glob('.\libxlsxwriter\test\functional\xlsx_files\*.xlsx');.output.read out.txt

还真被我测试出一些问题。
比如

Binder Error:
Read spreadsheet failed: Empty sheet or missing data
和
Invalid Input Error:
Read spreadsheet failed: Invalid cell value at 'A1': #VALUE!
以及
Invalid Input Error:
Read spreadsheet failed: Invalid cell value at 'A2': #DIV/0!

想要捕捉出错的文件,可以在每两个语句之间插入文件名标记,像这样, 只要用它替换上面完整语句中间那一句就行了。注意去掉limit 2。

select 'copy(from read_sheet('''||file||''',header=0)) to '''||replace(file,'.xlsx','.xls')||''';'||chr(10)||'select '''||file||''';' from  glob('.\libxlsxwriter\test\functional\xlsx_files\*.xlsx')limit 2;

输出

copy(from read_sheet('.\libxlsxwriter\test\functional\xlsx_files\array_formula01.xlsx',header=0)) to '.\libxlsxwriter\test\functional\xlsx_files\array_formula01.xls';
select '.\libxlsxwriter\test\functional\xlsx_files\array_formula01.xlsx';
copy(from read_sheet('.\libxlsxwriter\test\functional\xlsx_files\array_formula02.xlsx',header=0)) to '.\libxlsxwriter\test\functional\xlsx_files\array_formula02.xls';
select '.\libxlsxwriter\test\functional\xlsx_files\array_formula02.xlsx';

这样错在哪个文件就明确了。

http://www.dtcms.com/a/331327.html

相关文章:

  • 前端-vue全局路由守卫的详情
  • 地测管理部绩效考核关键指标与地质数据分析
  • 如果未来出现了意识移植技术,如何确保移植后的意识是原本的意识而不是复制了一份
  • C++-setmap详解
  • 无人机图传模块——智能飞行的关键技术
  • 解锁AI潜能:五步写出让大模型神级指令
  • Cloudflare Tunnels穿透ssh
  • 51单片机-驱动LED模块教程
  • 【C#】Region、Exclude的用法
  • 无需公钥的无损加密解密
  • 深入详解C语言数组:承上启下——从C语言数组基础到数据结构衔接
  • 码上爬第八题【协程+ob混淆】
  • 【Java虚拟机】JVM相关面试题
  • 2025天府杯数学建模C题
  • 2025天府杯数学建模A题分析
  • 智能门锁:安全与便捷的现代家居入口
  • 第1节 从函数到神经网络:AI思路的逆袭之路
  • Mybatis学习笔记(八)
  • VS2022 C++生成和调用DLL动态链接库
  • 小杰python高级(six day)——pandas库
  • 自由学习记录(84)
  • nnDetection在windows系统下使用教程
  • 4.Ansible部署文件到主机
  • Torch -- 卷积学习day2 -- 卷积扩展、数据集、模型
  • Linux软件编程(四)多任务与多进程管理
  • 机械硬盘模块逻辑与工作原理
  • 某处卖600的【独角仙】尾盘十分钟短线 尾盘短线思路 手机电脑通用无未来函数
  • uniapp对接极光消息推送
  • 【CLR via C#(第3版)阅读笔记】类型基础
  • [特殊字符]走进华为,解锁商业传奇密码