当前位置: 首页 > 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.lryc.cn/news/621072.html

相关文章:

  • 树莓派 4B 上部署 Minecraft PaperMC 1.20.x 的一键部署脚本
  • Qwen2-VL-2B 轻量化部署实战:数据集构建、LoRA微调、GPTQ量化与vLLM加速
  • Java Stream API:让业务数据处理更优雅
  • HTTP协议深度解析
  • 多种适用于 MCU 固件的 OTA 升级方案
  • STM32学习笔记11-通信协议-串口基本发送与接收
  • Autoppt-AI驱动的演示文稿生成工具
  • pygame的帧处理中,涉及键盘的有`pg.event.get()`与`pg.key.get_pressed()` ,二者有什么区别与联系?
  • ModuleNotFoundError: No module named ‘vllm._C‘
  • 界面设计风格解析 | ABB 3D社交媒体视觉效果设计
  • 3ds MAX文件/贴图名称乱码?6大根源及解决方案
  • tlias智能学习辅助系统--Maven 高级-私服介绍与资源上传下载
  • Java 技术栈中间件优雅停机方案设计与实现全景图
  • FreeSWITCH 对接阿里云流式 TTS:让大模型通话秒级响应
  • Elasticsearch ABAC 配置:基于患者数据的动态访问控制
  • 功能菜:吃对比吃饱更实在的健康菜
  • 企业智脑正在构建企业第二大脑,四大场景引擎驱动数字化转型新范式
  • 资本的自我否定:四重矛盾中的历史辩证法
  • 【科研绘图系列】R语言绘制蝶形条形图蝶形柱状堆积图
  • nginx-集成prometheus监控(k8s)
  • 高并发内存池 性能瓶颈分析与基数树优化(9)
  • anaconda创建pytorch1.10.0和pytorch2.0.0的GPU环境
  • lesson38:MySQL数据库核心操作详解:从基础查询到高级应用
  • app-4 日志上传
  • 第一章 java基础
  • 在IAR Embedded Workbench for Arm中实现NXP S32K3安全调试
  • Wireshark中捕获的大量UDP数据
  • 一次 Unity ↔ Android 基于 RSA‑OAEP 的互通踩坑记
  • 【题解】P1000 超级玛丽游戏 题解
  • 2025中国快递物流智能装备产业发展论坛将于9月3日上海举办