如何在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
相关产品推荐
相关产品推荐

