You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DuckDB空间扩展中启用GDAL XLS驱动读取旧版Excel文件?

在DuckDB空间扩展中启用GDAL XLS驱动读取旧版Excel文件

问题核心

能否在DuckDB空间扩展中启用GDAL的XLS驱动,以读取旧版xls格式的Excel文件?当前尝试的代码为:

CREATE TABLE step1 AS SELECT * FROM st_read('./step1/Old_Excel_Format.xls', layer = 'General');

解答

1. 默认构建是否包含XLS驱动?

DuckDB空间扩展的预构建GDAL包默认不包含依赖libfreexl的XLS驱动。从你提到的module.cpp中调用的OGRRegisterAllInternal()逻辑来看,它仅注册GDAL编译时默认包含的驱动,而XLS驱动属于可选编译组件,未被纳入官方默认构建。

2. 启用XLS驱动的可行方案

方案一:自行编译带XLS驱动的空间扩展

  • 操作步骤:
    • 克隆DuckDB空间扩展仓库
    • 确保系统已安装libfreexl开发库
    • 修改GDAL编译配置,添加--with-freexl参数以启用XLS驱动
    • 重新编译并安装自定义版本的DuckDB空间扩展
  • 注意:编译过程需匹配对应系统环境的依赖版本,确保构建成功。

方案二:临时转换方案(无需编译)

若暂时无法自行编译,可先用GDAL命令行工具将xls文件转换为DuckDB支持的格式,再导入:

# 将xls转换为GeoJSON
ogr2ogr -f GeoJSON step1_converted.geojson ./step1/Old_Excel_Format.xls General
# 导入到DuckDB
CREATE TABLE step1 AS SELECT * FROM st_read('step1_converted.geojson');

3. 关于OGRRegisterAllInternal()的说明

该函数是GDAL内部的驱动注册逻辑,仅能注册编译时已包含的驱动,无法在运行时动态加载未编译进GDAL的驱动。因此若默认构建无XLS驱动,必须重新编译GDAL并包含该驱动才能启用。


内容的提问来源于stack exchange,提问作者barnardh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 10:12:14