返回作品列表

网友作品 #000107 · 提交于 2026/08/11

Excel加载项SQL查询构建器:免写SQL可视化查数据库

★★★★★业余水平办公智能体国内顶级模型ExcelVBA

作品作者

暖树业余水平
开发工具
办公智能体
AI 模型
国内顶级模型
使用 Skill
ExcelVBA
提交你的作品

作品简介

「我的工具箱」是一款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 安装

  1. 双击运行 dist\install_SqlQueryToolbox.bat
  2. 按提示完成安装,Excel 将自动加载工具箱
  3. 安装后 Excel 功能区出现“我的工具箱”选项卡

4.2 手动安装

  1. 打开 Excel 文件 选项 加载项
  2. 底部“管理”下拉选择“Excel 加载项” 点击“转到”
  3. 点击“浏览”,选择 SqlQueryToolbox.xlam 文件
  4. 勾选加载项名称 确定

4.3 卸载

  1. 双击运行 dist\uninstall_SqlQueryToolbox.bat
  2. 或在 Excel 加载项管理中取消勾选

4.4 启用 VBA 工程

若无法正常加载,需启用 VBA 工程访问权限:

  1. 文件 选项 信任中心 信任中心设置
  2. 宏设置 勾选“信任对 VBA 工程对象模型的访问”
  3. 确定 重启 Excel

五、使用指南

5.1 功能区按钮

按钮 功能
查询构建器 打开可视化 SQL 查询构建窗口
快速查询 打开查询管理窗口,选择并执行已保存的查询

5.2 查询构建器界面

查询构建器包含 6 个分页标签,按顺序操作:

第1页:连接配置

配置 SQL Server 数据库连接参数。

操作步骤:

  1. 在“配置名称”下拉框中选择已保存的连接,或输入新名称
  2. 填写“服务器”地址(如 192.168.1.100、localhost\SQLEXPRESS)
  3. 设置“超时(秒)”(默认 15 秒,测试连接时限制在 3-10 秒)
  4. 选择身份验证方式:
    • 勾选“使用Windows身份验证” 使用当前 Windows 账户登录
    • 取消勾选 输入 SQL Server 用户名和密码
  5. 点击“测试连接”验证连通性
  6. 点击“刷新数据库”获取服务器上的数据库列表
  7. 从“数据库”下拉框选择目标数据库
  8. 点击“保存连接”保存配置
  9. 点击“获取表列表”连接数据库并获取表结构

连接参数说明:

参数 说明 示例
配置名称 连接配置的标识名称 生产库_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页:表配置

选择需要查询的数据表并设置别名。

操作步骤:

  1. 在“可用表”列表中双击表名,或选中后点击“添加 >”
  2. 在“表别名”输入框中设置别名(如 A、B、C),留空则使用表名首字母
  3. 已选表格式为 别名=表名,双击可移除
  4. 别名用于 SQL 语句中的表引用(如 SELECT A.* FROM Users A)

表配置格式:

别名1=表名1|别名2=表名2

示例:A=Users|B=Orders|C=Products

第3页:关系配置

配置表之间的 JOIN 关系。

操作步骤:

  1. 在“左表”下拉框选择左表别名
  2. 在“左字段”下拉框选择左表关联字段(自动获取表结构)
  3. 在“右表”下拉框选择右表别名
  4. 在“右字段”下拉框选择右表关联字段
  5. 在“JOIN类型”下拉框选择连接方式
  6. 点击“添加关系”
  7. 重复以上步骤添加更多关系

JOIN 类型说明:

类型 说明 效果
LEFT JOIN 左连接(默认) 返回左表所有行,右表无匹配则为 NULL
INNER JOIN 内连接 只返回两表都有匹配的行
RIGHT JOIN 右连接 返回右表所有行,左表无匹配则为 NULL

关系配置格式:

左表别名.左字段=右表别名.右字段:JOIN类型|...

示例:A.UserID=B.UserID:LEFT JOIN|B.ProductID=C.ProductID:INNER JOIN

第4页:字段选择

选择查询返回的字段。

操作步骤:

  1. 在“选择表”下拉框中选择表别名
  2. 在“可用字段”列表中双击字段名,或选中后点击“添加 >”
  3. 在“别名(可选)“输入框中设置字段显示别名(AS 后面的名称)
  4. 点击“全部 >>“可添加当前表的所有字段
  5. 已选字段格式为 别名.字段名 或 别名.字段名 AS 显示名
  6. 双击已选字段可移除,点击“清空”移除所有

字段配置格式:

表别名.字段名|表别名.字段名 AS 显示名|...

示例:A.UserID|A.UserName AS 用户名|B.OrderDate AS 下单日期

第5页:条件排序

配置 WHERE 过滤条件和 ORDER BY 排序规则。

WHERE 条件配置:

  1. 在“字段”下拉框选择或输入条件字段
  2. 在“操作”下拉框选择比较操作符
  3. 在“值”输入框输入条件值
  4. 在“连接”下拉框选择与下一条件的连接方式(AND/OR)
  5. 点击“添加条件”
  6. 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 排序配置:

  1. 在“字段”下拉框选择排序字段
  2. 在“方向”下拉框选择 ASC(升序)或 DESC(降序)
  3. 点击“添加排序”
  4. 可添加多个排序字段,按添加顺序优先

条件配置格式:

字段|操作符|值|连接符|字段|操作符|值|连接符|...

示例:A.Status|=|1|AND|B.OrderDate|>=|{d1}|

排序配置格式:

字段|方向|字段|方向|...

示例:B.OrderDate|DESC|A.UserName|ASC

第6页:SQL预览

预览生成的 SQL 语句,设置参数,执行查询。

操作步骤:

  1. 点击“生成SQL”按钮,根据前5页配置生成 SQL 语句
  2. 在 SQL 预览框中可手动编辑 SQL
  3. 如使用了参数占位符,在“参数设置”区按 参数名=值 格式输入(每行一个)
  4. 在“输出位置”输入框设置结果输出起始单元格(默认 A1)
  5. 点击“执行查询”将结果输出到当前工作表

参数设置格式:

d1=2024-01-01
d2=2024-12-31
status=1

5.3 底部操作区

控件 功能
说明 查询配置的文字说明,便于后续识别管理
配置名称 查询配置的标识名称
保存配置 保存当前所有配置(表、关系、字段、条件、排序、SQL、说明)
加载配置 加载已保存的查询配置到窗体
删除配置 删除已保存的查询配置
关闭 关闭查询构建器

5.4 快速查询(查询管理)

  1. 点击功能区“快速查询”按钮
  2. 在左侧列表中选择查询配置(双击可直接执行)
  3. 右侧显示查询详情(名称、连接配置、说明、SQL预览)
  4. 点击“执行查询”将结果输出到当前工作表
  5. 点击“删除查询”移除不需要的配置
  6. 点击“刷新列表”重新加载配置列表

六、配置文件

所有配置存储在用户目录下,路径为:

%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