DBeaver通过Office Integration插件可直接连接.xlsx/.xls文件,每个Sheet自动映射为表(如"销售明细$"),支持SQL查询;需加双引号引用含$、空格或中文的Sheet名,隐藏/受保护/含宏/加密文件不支持。

直接用 Office Integration 插件连 Excel 文件,每个 Sheet 自动变成一张表
DBeaver 从 v21.0 开始内置 Office Integration 插件(社区版默认启用),只要你的 Excel 文件是 .xlsx 或 .xls 格式,就能跳过 CSV 转换,直接当数据库连——不用建表、不改数据、不写脚本。
操作路径:数据库 → 新建连接 → 选择 “MS Excel” 类型 → 指定 Excel 文件路径 → 完成。连接成功后,在导航器里展开该连接,每个 Sheet 名(如 "销售明细$"、"客户列表$")都会显示为独立的“表”,可直接执行 SELECT * FROM "销售明细$" 查询。
注意点:
-
Sheet名末尾带$是 DBeaver 的约定,查的时候必须加双引号,否则报错Table not found - 含空格或中文的 Sheet 名(如
"2024 年汇总")也必须加引号,且不能省略$(DBeaver 实际映射名是"2024 年汇总$") - 隐藏 Sheet、仅含公式的 Sheet、被保护的 Sheet 不会出现在连接中
- Apache POI 解析限制:不支持
.xlsb、.xlsm(含宏)、加密文件
想把多个 Sheet 导进同一个目标表?得先合并再导入
Office Integration 只能“读取”多 Sheet,但 导入数据 向导只支持单个源(CSV / Excel 表 / 查询结果)。要把多个 Sheet 的数据统一灌进一张 MySQL/PostgreSQL 表,必须先做结构对齐和拼接。
推荐做法是:在 Excel 里用 Power Query 合并(Windows)或用 Python 脚本批量读取,再导出为单个 CSV;不建议手动复制粘贴,容易漏 Sheet 或列错位。
如果坚持在 DBeaver 内完成,可行但麻烦:
- 逐个右键点击每个 Sheet 表(如
"Sheet1$")→导出数据→ 保存为 CSV(记得勾选包含标题行) - 用文本编辑器合并多个 CSV 文件内容(首份保留表头,其余删掉第一行)
- 再用
导入数据向导把合并后的 CSV 导入目标表 - 关键检查:所有 Sheet 的列顺序、列名、数据类型必须一致,否则导入时字段映射会错乱
导入后日期变数字、身份证丢前导零?这是 POI 类型推断惹的祸
DBeaver 底层用 Apache POI 读 Excel,它对单元格类型是“静态识别”的:Excel 里设成“文本格式”的身份证号 0012345678,POI 仍可能按数值处理,导致前导零丢失;日期单元格若没设好格式,会被转成序列值(如 45365)。
临时解法(适合少量数据):
- 在 Excel 中,对问题列全选 → 右键 →
设置单元格格式 → 文本→ 再双击编辑框强制重算 - 保存前另存为
CSV UTF-8,用记事本打开确认前几行是否含前导零或日期字符串(如"2024-03-15"而非45365)
根治办法(适合批量):用 Python + pandas.read_excel(..., dtype=...) 显式指定列类型,再写入数据库,绕过 DBeaver 的 POI 层。
Mac/Linux 下打不开 Excel 文件?检查文件权限和扩展名大小写
Linux 和 macOS 对文件系统大小写敏感,而 DBeaver 的 Office 插件依赖文件扩展名判断格式。常见失败场景:
- 文件实际是
data.XLSX(大写),插件识别失败,报unsupported file format - 文件放在
/tmp或挂载的 NTFS 分区,当前用户无读权限(ls -l看是否显示Permission denied) - macOS 上双击 .xls 文件没反应,是因为 DBeaver 默认不注册为 Excel 文件关联程序,需手动拖入 DBeaver 窗口或用终端启动:
open -a "DBeaver" /path/to/file.xlsx
最稳路径:把文件放到家目录下,确保扩展名小写(.xlsx),右键连接时用绝对路径粘贴,别用中文路径或桌面符号链接。
多 Sheet 场景真正麻烦的不是“怎么连”,而是“怎么保证语义一致”——同一列在不同 Sheet 里叫 cust_id、customer_no、客户编号,DBeaver 不会自动归一。这类问题没法靠工具按钮解决,得人工核对映射逻辑。











