网友作品 #000107 · 提交于 2026/08/11
Excel加载项SQL查询构建器:免写SQL可视化查数据库




1 / 4
作品简介
「我的工具箱」是一款Excel VBA加载项(xlam),提供可视化的SQL Server数据库查询构建功能。安装后Excel功能区会出现「我的工具箱」选项卡,包含查询构建器和快速查询两个入口。查询构建器用六个分页标签引导用户依次完成连接配置、表配置、关系配置、字段选择、条件排序和SQL预览,自动生成SQL语句并执行,把查询结果直接输出到Excel工作表。针对用友U8等ERP的英文表名字段名难题,工具集成了U8 13.0数据字典,可以按中文模糊搜索数据表和字段。
核心亮点
- 分页式可视化构建:连接、选表、JOIN、字段、条件排序、SQL预览六步引导,不写SQL也能完成复杂查询
- 多表JOIN:支持LEFT JOIN、INNER JOIN、RIGHT JOIN三种连接方式
- U8数据字典集成:表名、字段名按用友U8 13.0数据字典显示中文说明,支持中英文模糊搜索,别名中英文均可
- 参数化查询:条件值支持占位符,执行时动态替换参数值,一套配置可反复使用
- 连接与查询管理:多套数据库连接、查询配置可保存、加载、删除,密码加密存储,快速查询窗口双击即执行
- 结果直出Excel:可指定输出起始单元格,生成的SQL还能手动编辑微调
- 兼容性强:支持Windows 7+、Excel 2013+(32/64位)、SQL Server 2008+,提供一键安装卸载脚本
技术与工具
- 技能标签:ExcelVBA,交付形态为xlam加载项
- 数据访问:ADO组件(SQLOLEDB提供程序),支持Windows身份验证与SQL Server身份验证
- 环境要求:.NET Framework 3.5+,配置以ini文件存储在用户目录
- 开发方式:借助办公智能体类工具与国内顶级模型完成
适用场景
- 用友U8等SQL Server架构ERP的自助提数:业务人员无需掌握SQL即可自行筛选拉取业务数据,减少技术部门提数需求
- 日常报表制作:从业务库批量取数到Excel,直接进行统计、分析、报表制作
- 老旧环境适配:Win7与Excel 2013等老版本办公环境也能使用
原始提交内容(点开查看,可复制全文去问 AI)
一、项目概述
我的工具箱是一款 Excel VBA 加载项(xlam),提供可视化的 SQL Server 数据库查询构建功能。通过分页式图形界面引导用户完成数据库连接、表选择、关系定义、字段筛选、条件排序等操作,自动生成 SQL 语句并执行查询,将结果输出到 Excel 工作表。
二、功能特性
- 可视化查询构建:分页式界面,无需手写 SQL 即可完成复杂查询
- 多表 JOIN 支持:支持 LEFT JOIN、INNER JOIN、RIGHT JOIN 三种连接类型
- 连接管理:保存/加载/删除多套数据库连接配置,密码加密存储
- 查询管理:保存/加载/删除查询配置,支持说明文字,快速执行
- 参数化查询:支持
{参数名}占位符,执行时动态替换参数值 - 窗口可缩放:支持拖拽边框调整窗口大小和最大化
- 兼容性强:支持 Windows 7+ / Excel 2013+(32位和64位)
三、系统要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 7 SP1 及以上 |
| Excel 版本 | Excel 2013 及以上(支持 Office 365) |
| 数据库 | SQL Server 2008 及以上 |
| .NET Framework | 3.5 及以上(ADO 组件依赖) |
| VBA 安全设置 | 需启用“信任对 VBA 工程对象模型的访问” |
四、安装与卸载
4.1 安装
- 双击运行
dist\install_SqlQueryToolbox.bat - 按提示完成安装,Excel 将自动加载工具箱
- 安装后 Excel 功能区出现“我的工具箱”选项卡
4.2 手动安装
- 打开 Excel 文件 选项 加载项
- 底部“管理”下拉选择“Excel 加载项” 点击“转到”
- 点击“浏览”,选择
SqlQueryToolbox.xlam文件 - 勾选加载项名称 确定
4.3 卸载
- 双击运行
dist\uninstall_SqlQueryToolbox.bat - 或在 Excel 加载项管理中取消勾选
4.4 启用 VBA 工程
若无法正常加载,需启用 VBA 工程访问权限:
- 文件 选项 信任中心 信任中心设置
- 宏设置 勾选“信任对 VBA 工程对象模型的访问”
- 确定 重启 Excel
五、使用指南
5.1 功能区按钮
| 按钮 | 功能 |
|---|---|
| 查询构建器 | 打开可视化 SQL 查询构建窗口 |
| 快速查询 | 打开查询管理窗口,选择并执行已保存的查询 |
5.2 查询构建器界面
查询构建器包含 6 个分页标签,按顺序操作:
第1页:连接配置
配置 SQL Server 数据库连接参数。
操作步骤:
- 在“配置名称”下拉框中选择已保存的连接,或输入新名称
- 填写“服务器”地址(如
192.168.1.100、localhost\SQLEXPRESS) - 设置“超时(秒)”(默认 15 秒,测试连接时限制在 3-10 秒)
- 选择身份验证方式:
- 勾选“使用Windows身份验证” 使用当前 Windows 账户登录
- 取消勾选 输入 SQL Server 用户名和密码
- 点击“测试连接”验证连通性
- 点击“刷新数据库”获取服务器上的数据库列表
- 从“数据库”下拉框选择目标数据库
- 点击“保存连接”保存配置
- 点击“获取表列表”连接数据库并获取表结构
连接参数说明:
| 参数 | 说明 | 示例 |
|---|---|---|
| 配置名称 | 连接配置的标识名称 | 生产库_ERP |
| 服务器 | SQL Server 地址,支持 IP、主机名、实例名 | 10.0.0.5 或 DBSRV\SQLEXPRESS |
| 超时(秒) | 连接超时时间,正式查询使用此值 | 15 |
| 身份验证 | Windows 身份验证(SSPI)或 SQL Server 身份验证 | - |
| 用户名 | SQL Server 身份验证时的用户名 | sa |
| 密码 | SQL Server 身份验证时的密码(加密存储) | ****** |
| 数据库 | 目标数据库名称(刷新后从下拉列表选择) | ERP_DB |
连接字符串格式:
Windows身份验证:
Provider=SQLOLEDB.1;Integrated Security=SSPI;Data Source=服务器地址;Initial Catalog=数据库名
SQL Server身份验证:
Provider=SQLOLEDB.1;User ID=用户名;Password=密码;Data Source=服务器地址;Initial Catalog=数据库名
第2页:表配置
选择需要查询的数据表并设置别名。
操作步骤:
- 在“可用表”列表中双击表名,或选中后点击“添加 >”
- 在“表别名”输入框中设置别名(如 A、B、C),留空则使用表名首字母
- 已选表格式为
别名=表名,双击可移除 - 别名用于 SQL 语句中的表引用(如
SELECT A.* FROM Users A)
表配置格式:
别名1=表名1|别名2=表名2
示例:A=Users|B=Orders|C=Products
第3页:关系配置
配置表之间的 JOIN 关系。
操作步骤:
- 在“左表”下拉框选择左表别名
- 在“左字段”下拉框选择左表关联字段(自动获取表结构)
- 在“右表”下拉框选择右表别名
- 在“右字段”下拉框选择右表关联字段
- 在“JOIN类型”下拉框选择连接方式
- 点击“添加关系”
- 重复以上步骤添加更多关系
JOIN 类型说明:
| 类型 | 说明 | 效果 |
|---|---|---|
| LEFT JOIN | 左连接(默认) | 返回左表所有行,右表无匹配则为 NULL |
| INNER JOIN | 内连接 | 只返回两表都有匹配的行 |
| RIGHT JOIN | 右连接 | 返回右表所有行,左表无匹配则为 NULL |
关系配置格式:
左表别名.左字段=右表别名.右字段:JOIN类型|...
示例:A.UserID=B.UserID:LEFT JOIN|B.ProductID=C.ProductID:INNER JOIN
第4页:字段选择
选择查询返回的字段。
操作步骤:
- 在“选择表”下拉框中选择表别名
- 在“可用字段”列表中双击字段名,或选中后点击“添加 >”
- 在“别名(可选)“输入框中设置字段显示别名(AS 后面的名称)
- 点击“全部 >>“可添加当前表的所有字段
- 已选字段格式为
别名.字段名或别名.字段名 AS 显示名 - 双击已选字段可移除,点击“清空”移除所有
字段配置格式:
表别名.字段名|表别名.字段名 AS 显示名|...
示例:A.UserID|A.UserName AS 用户名|B.OrderDate AS 下单日期
第5页:条件排序
配置 WHERE 过滤条件和 ORDER BY 排序规则。
WHERE 条件配置:
- 在“字段”下拉框选择或输入条件字段
- 在“操作”下拉框选择比较操作符
- 在“值”输入框输入条件值
- 在“连接”下拉框选择与下一条件的连接方式(AND/OR)
- 点击“添加条件”
is null和is not null操作符不需要值
支持的比较操作符:
| 操作符 | 说明 | 示例值 |
|---|---|---|
= |
等于 | 100 或 '张三' |
<> |
不等于 | 100 |
> |
大于 | 100 |
< |
小于 | 100 |
>= |
大于等于 | 100 |
<= |
小于等于 | 100 |
like |
模糊匹配 | '%张%' |
in |
包含在列表中 | 1, 2, 3 |
between |
范围之间 | '2024-01-01' AND '2024-12-31' |
is null |
为空 | (无需输入值) |
is not null |
不为空 | (无需输入值) |
条件值中的参数占位符:
条件值中可使用 {参数名} 占位符,在 SQL 预览页设置实际值。
示例:条件值输入 {d1},在 SQL 预览页参数设置区输入 d1=2024-01-01
ORDER BY 排序配置:
- 在“字段”下拉框选择排序字段
- 在“方向”下拉框选择 ASC(升序)或 DESC(降序)
- 点击“添加排序”
- 可添加多个排序字段,按添加顺序优先
条件配置格式:
字段|操作符|值|连接符|字段|操作符|值|连接符|...
示例:A.Status|=|1|AND|B.OrderDate|>=|{d1}|
排序配置格式:
字段|方向|字段|方向|...
示例:B.OrderDate|DESC|A.UserName|ASC
第6页:SQL预览
预览生成的 SQL 语句,设置参数,执行查询。
操作步骤:
- 点击“生成SQL”按钮,根据前5页配置生成 SQL 语句
- 在 SQL 预览框中可手动编辑 SQL
- 如使用了参数占位符,在“参数设置”区按
参数名=值格式输入(每行一个) - 在“输出位置”输入框设置结果输出起始单元格(默认 A1)
- 点击“执行查询”将结果输出到当前工作表
参数设置格式:
d1=2024-01-01
d2=2024-12-31
status=1
5.3 底部操作区
| 控件 | 功能 |
|---|---|
| 说明 | 查询配置的文字说明,便于后续识别管理 |
| 配置名称 | 查询配置的标识名称 |
| 保存配置 | 保存当前所有配置(表、关系、字段、条件、排序、SQL、说明) |
| 加载配置 | 加载已保存的查询配置到窗体 |
| 删除配置 | 删除已保存的查询配置 |
| 关闭 | 关闭查询构建器 |
5.4 快速查询(查询管理)
- 点击功能区“快速查询”按钮
- 在左侧列表中选择查询配置(双击可直接执行)
- 右侧显示查询详情(名称、连接配置、说明、SQL预览)
- 点击“执行查询”将结果输出到当前工作表
- 点击“删除查询”移除不需要的配置
- 点击“刷新列表”重新加载配置列表
六、配置文件
所有配置存储在用户目录下,路径为:
%APPDATA%\SQLQueryToolbox\
connections.ini # 连接配置
queries.ini # 查询配置
6.1 connections.ini 格式
[CONN_连接名称]
Server=服务器地址
Database=数据库名
UseWindowsAuth=1或0
User=用户名
Password=加密后的密码
Timeout=超时秒数
密码使用 XOR 算法加密存储,防止明文暴露。
6.2 queries.ini 格式
[QUERY_查询名称]
ConnectionName=关联的连接配置名
Tables=别名1=表名1|别名2=表名2
Relations=左表.左字段=右表.右字段:JOIN类型|...
Fields=别名.字段名 AS 显示名|...
Conditions=字段|操作符|值|连接符|...
OrderBy=字段|方向|...
SqlText=完整SQL语句
Description=查询说明
七、生成SQL示例
7.1 单表查询
配置:
- 表:
A=Users - 字段:
A.UserID|A.UserName AS 用户名|A.Email - 条件:
A.Status|=|1|AND|A.CreateDate|>=|{d1}| - 排序:
A.CreateDate|DESC
生成SQL:
SELECT A.UserID, A.UserName AS 用户名, A.Email
FROM Users A
WHERE A.Status = 1 AND A.CreateDate >= {d1}
ORDER BY A.CreateDate DESC
7.2 多表JOIN查询
配置:
- 表:
A=Users|B=Orders|C=Products - 关系:
A.UserID=B.UserID:LEFT JOIN|B.ProductID=C.ProductID:INNER JOIN - 字段:
A.UserName AS 用户名|B.OrderDate AS 下单日期|C.ProductName AS 商品名称|B.Quantity AS 数量 - 条件:
B.OrderDate|between|{d1} AND {d2}| - 排序:
B.OrderDate|DESC|A.UserName|ASC
生成SQL:
SELECT A.UserName AS 用户名, B.OrderDate AS 下单日期, C.ProductName AS 商品名称, B.Quantity AS 数量
FROM Users A LEFT JOIN Orders B ON A.UserID = B.UserID INNER JOIN Products C ON B.ProductID = C.ProductID
WHERE B.OrderDate BETWEEN {d1} AND {d2}
ORDER BY B.OrderDate DESC, A.UserName ASC