返回作品列表

网友作品 #000220 · 提交于 2026/09/11

DM Query转Excel插件:查询数据一键写入工作表

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

作品作者

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

作品简介

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 组件 DLL
  • runtime/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),交付给同事的安装包。

四、技术方案(含一次关键推翻)

项目经历了一次方案推翻重做:

  1. 第一版(.NET 8 + 纯自研 WinForms + mrOleDB)

    • 用 System.Data.OleDb 直接连 mrOleDB.Provider.2 查询数据,自研查询界面。
    • 问题:.NET 8 无法加载原版依赖的 .NET Framework 4.7.1 程序集,导致「很多功能没生效」。
  2. 最终版(.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.ReferenceAssemblies NuGet 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 蓝图的残留文档,正式交付可考虑清理。