网友作品 #000220 · 提交于 2026/09/11
DM Query转Excel插件:查询数据一键写入工作表


1 / 2
作品简介
DMQueryAddIn 把 IBM/UNICOM「DM Query」桌面工具(Dimensions 数据查询与导出工具)改造成 Excel-DNA 插件:在 Excel 顶部新增「DM Query」页签,点「打开 DM Query」即可在 Excel 内嵌入打开原版 7.5.1 完整窗口,查询、筛选、多种格式导出与配额管理功能与原版 100% 一致。
除完整承载原版外,插件还有两个自研加分项:「查询并写入工作表」窗口可连接数据源、执行 SELECT 并把结果写进新工作表;「导出 Excel (Label)」增强导出支持题目 label + 值 label + 多选题合并(MDMLib 读元数据、OleDb 读 VDATA)。最终交付包含 32/64 位 xll、依赖 DLL、一键安装/卸载脚本、使用说明与样例数据,可直接发给同事安装。
核心亮点
- 原版窗口完整嵌入 Excel:直接引用原版 DMQuery.dll,
new DMQuery.FormDMQuery().Show()即可调出原版界面,查询、筛选、导出(DDF/Sav/Csv/Quantum/Triple-S/OE/IIS/Topline)、变量与采访筛选器、配额管理一个不少 - 查询并写入工作表:自研窗口连接数据源执行 SELECT,结果直接落进新工作表
- 增强导出 Excel (Label):题目 label、值 label、多选题合并一步到位
- 依赖自动解析:自研 DependencyResolver 按简单名从插件目录加载 27 个 Dimensions 组件 DLL,解决版本重定向问题
- 反射摘除原版 Load 事件:规避原程序误读 Excel 命令行参数
- 一键安装交付:install/uninstall bat + 32/64 位 xll + 示例文件,同事双击即用
- 兜底入口:「启动原程序」可直接拉起本机原始 DMQuery.exe,「关于」显示宿主/Excel/.NET 版本与日志目录
技术与工具
- 形态:Excel-DNA v1.1.0 插件 + .NET Framework 4.8(同事机无需另装 .NET 8)
- 反编译分析:用反编译源码分析原版 DMQuery 7.5.1 与 Dimensions 组件(datasource/mdmlib)的功能与依赖
- 技术验证:
_spike控制台工程验证关键假设,实测 OleDb 连接串Provider=mrOleDB.Provider.2可取到真实数据(SELECT * FROM HDATA 38 列) - 环境探测:Python 脚本探测本机 .NET/SDK/OleDb 环境、下载解压 SDK、组装交付物
- 开发方式:办公智能体工具 + 国内顶级 AI 模型完成反编译解读与插件编码
开发过程
原程序是一套 .NET Framework 4.7.1 WinForms 工具(主窗体 6700+ 行、8 个子窗体),前同事离开后源码失传。作者先做第一版(.NET 8 + 纯自研 WinForms + mrOleDB 直连),后发现 .NET 8 无法加载原版依赖的 4.7.1 程序集、很多功能没生效,果断推翻重做:改用 .NET Framework 4.8 + Excel-DNA,直接嵌入原版 DMQuery.dll,功能 100% 保留,再叠加自研写表与增强导出,最终打包成安装包交付。
适用场景
- 企业内部 Dimensions/SPSS Data Collection 数据的日常查询与导出,整合进 Excel 办公环境
- 团队共享数据查询工具:一键安装包让同事免配环境直接使用
- 关键工具源码失传、只有成品 exe 时,借助反编译 + AI 重建为可维护的插件形态
原始提交内容(点开查看,可复制全文去问 AI)
DM Query 转 Excel 插件(DMQueryAddIn)项目介绍
一、项目一句话概述
把 IBM / UNICOM「DM Query」桌面工具(Dimensions 数据查询与导出)改造成一个 Excel-DNA 插件,让用户直接在 Excel 里打开原版查询窗口、执行 SQL 查询并把结果写回工作表,最终打包成可发给同事的安装包。
二、目录结构
| 目录 | 用途 |
|---|---|
DMQueryAddIn/ |
主插件项目(Excel-DNA + .NET Framework 4.8),含源码、交付物 dist/、运行时与文档 |
_decompiled/ |
原版 DMQuery_7.5.1 与 Dimensions 组件(datasource / mdmlib)的反编译源码,用于分析原程序功能与依赖 |
_probe/ |
环境探测脚本(Python):探测本机 .NET / SDK / OleDb 环境、下载解压 SDK、组装交付物 |
_spike/ |
技术验证控制台工程(net48):DmLoadTest / DmSpike / DumpColumns / OleDbProbe,用于验证关键假设 |
.workbuddy/ |
工作区记忆(当日工作日志) |
DMQueryAddIn/ 内部关键结构
src/DMQueryAddIn/—— 插件源码AddIn.cs—— 插件生命周期 +DependencyResolver(按简单名从插件目录加载 Dimensions 程序集)RibbonController.cs—— Ribbon 分发,含「反射摘除原版 Load 事件」以规避误读命令行QueryToSheetForm.cs—— 「查询并写入工作表」窗口(自研加分项)DmEnhancedExporter.cs+EnhancedExportForm.cs—— 「导出 Excel (Label)」增强导出Resources/Ribbon.xml—— 自定义 Ribbon 页签定义
lib/——DMQuery.dll(原版 exe 改名)+ 27 个 Dimensions 组件 DLLruntime/exceldna/—— 本地补丁版 ExcelDNA 运行时scripts/、tools/—— 安装/卸载与构建脚本dist/—— 交付入口(xll 32/64 位、dna、依赖 DLL、安装/卸载 bat、示例文件)docs/—— 蓝图级能力说明与 WebView2 关闭清单(早期蓝图的残留文档)
三、背景与目标
- 源程序:
C:\Program Files\IBM\SPSS\DataCollection\7\DDL\Code\Tools\VB.NET\DM Query\,是一套 .NET Framework 4.7.1 WinForms 工具,主窗体 6700+ 行、另含 8 个子窗体。 - 原版能力远超「查询」:导出(DDF / Sav / Csv / Quantum / Triple-S / OE / IIS / Topline)+ 变量/采访筛选器 + 配额管理,依赖
SPSSMR.Data.Transformations.Job、MDMLib、CDSCLib、MRSCRIPTLib等 Dimensions 组件。 - 目标:把这些功能完整搬进 Excel,宿主只做 Excel(本机 365 x64),交付给同事的安装包。
四、技术方案(含一次关键推翻)
项目经历了一次方案推翻重做:
-
第一版(.NET 8 + 纯自研 WinForms + mrOleDB)
- 用
System.Data.OleDb直接连mrOleDB.Provider.2查询数据,自研查询界面。 - 问题:
.NET 8无法加载原版依赖的 .NET Framework 4.7.1 程序集,导致「很多功能没生效」。
- 用
-
最终版(.NET Framework 4.8 + 嵌入原版 7.5.1) 已确认
- 改用 Excel-DNA v1.1.0 + .NET Framework 4.8(Windows 自带,同事机无需另装 .NET 8)。
- 直接引用原版
DMQuery.dll,new DMQuery.FormDMQuery().Show()把原版窗口完整嵌入 Excel,功能 100% 一致。 - 保留自研加分项「查询并写入工作表」「导出 Excel (Label)」。
- 新增
DependencyResolver(AppDomain.AssemblyResolve)解决 Dimensions 组件版本重定向问题。
五、Ribbon 功能入口
插件在 Excel 顶部新增「DM Query」页签:
| 按钮 | 功能 |
|---|---|
| 打开 DM Query | 在 Excel 内嵌入打开原版 DM Query 7.5.1 完整窗口(查询/筛选/导出/配额) |
| 查询并写入工作表 | 自研窗口:连接数据源 执行 SELECT 结果写进新工作表 |
| 导出 Excel (Label) | 增强导出:题目 label + 值 label + 多选题合并(用 MDMLib 读元数据 + OleDb 读 VDATA) |
| 启动原程序 | 兜底:直接启动本机原始 DMQuery.exe |
| 关于 | 显示宿主 / Excel / .NET 版本与日志目录 |
六、交付物(dist/)
install_excel_addin.bat/uninstall_excel_addin.bat—— 一键安装/卸载入口files/——DMQueryAddIn-AddIn.xll(32 位)+-AddIn64.xll(64 位)、.dna、DMQueryAddIn.dll、DMQuery.dll、ExcelDna.Integration.dll、27 个 Dimensions DLL、安装脚本、日志目录examples/—— 「DM Query 使用说明.xlsx」+sample_data/(short_drinks样例 .ddf/.mdd)安装说明.txt—— 面向最终用户的分发与安装指引
七、已验证的关键技术结论
.NET 8 + System.Data.OleDb能连mrOleDB(实测SELECT * FROM HDATA取到 38 列真实数据)。- 连接串写法:
Provider=mrOleDB.Provider.2;Data Source=mrDataFileDsc;Location=<.ddf 或 .mdd 路径>。 - Excel-DNA v1.1.0 支持 .NET Framework(
.dna用RuntimeVersion="v4.0")。 - SDK 8 编译 net48 需
Microsoft.NETFramework.ReferenceAssembliesNuGet 1.0.3(本机无 VS 目标包)。 - 实测通过:net48 控制台
new DMQuery.FormDMQuery()实例化成功、依赖正常解析。
八、待办 / 风险
- ️ 尚未在真实 Excel 里加载验证(本环境无法启动 GUI Excel),需双击
install_excel_addin.bat后重启 Excel,在「DM Query」页签逐项验收。 - 同事机需装 .NET Framework 4.8(Win 自带,通常无需额外安装)+ IBM Data Collection 7(提供
mrOleDB组件)。 docs/下仍有早期 WebView2 蓝图的残留文档,正式交付可考虑清理。