https://github.com/mwmi/excel-rtd-server
A C++ RTD (Real-Time Data) server implementing Excel RTD interface for real-time data updates in Microsoft Excel and WPS Office
https://github.com/mwmi/excel-rtd-server
excel rtd
Last synced: about 1 month ago
JSON representation
A C++ RTD (Real-Time Data) server implementing Excel RTD interface for real-time data updates in Microsoft Excel and WPS Office
- Host: GitHub
- URL: https://github.com/mwmi/excel-rtd-server
- Owner: mwmi
- License: mit
- Created: 2025-08-24T10:30:27.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2025-08-29T15:31:51.000Z (about 1 month ago)
- Last Synced: 2025-08-29T18:38:09.002Z (about 1 month ago)
- Topics: excel, rtd
- Language: C++
- Homepage:
- Size: 684 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# RTDServer
一个基于 C++ 开发的 RTD (Real-Time Data) 服务器,支持为 Microsoft Excel(64位) 和 WPS Office(32位) 提供实时数据服务。该项目实现了 Excel RTD 接口,支持多种数据源和自定义任务。

## 🚀 项目特性
- **Excel RTD 兼容**: 实现 Microsoft Excel RTD 接口规范
- **智能权限注册**: 自动检测权限级别,支持管理员和用户级COM组件注册
- **自定义任务**: 支持时钟、文件读取、网页抓取、命令执行等多种操作
- **异步处理**: 支持异步任务执行,提高性能
- **COM 组件**: 作为 COM 组件可被 Excel 或其他应用程序调用
- **多线程安全**: 支持多线程环境下的数据更新
- **实时更新**: 自动通知 Excel 数据变化
- **免管理员权限**: 支持用户级注册,无需管理员权限即可使用## 📁 项目结构
```
RTDServer/
├── include/ # 头文件目录
│ ├── IRTDServer.h # RTD 服务器接口定义
│ ├── RTDTopic.h # 主题类定义,管理数据项
│ ├── RtdDll.h # DLL 导出函数声明
│ └── RtdServer.h # RTD 服务器类声明
├── src/ # 源文件目录
│ ├── RTDTopic.cpp # 主题类实现
│ ├── RtdDll.cpp # DLL 入口点和 COM 注册
│ └── RtdServer.cpp # RTD 服务器核心实现
├── dll/ # 预编译DLL文件
│ ├── RTDServer32.dll # 32位版本DLL
│ └── RTDServer64.dll # 64位版本DLL
├── CMakeLists.txt # CMake 构建配置
├── dll.def # DLL 导出函数定义
├── main.cpp # 任务创建和数据处理逻辑
├── Test.cpp # COM 组件测试程序
├── test.xlsx # Excel 测试文件
├── preview.gif # 项目演示动图
└── README.md # 项目说明文档
```## 🛠️ 技术栈
- **语言**: C++20
- **构建工具**: CMake 3.10+ / Ninja (可选)
- **平台**: Windows (主要)
- **编译器**: MSVC (推荐) / GCC (MSYS2 mingw-w64)
- **架构**: COM 组件 + DLL## 📋 系统要求
### 开发环境
- CMake 3.10 或更高版本
- Ninja 构建系统 (可选,用于更快的增量构建)
- C++23 兼容的编译器 (MSVC 2022+ 或 GCC 11+)
- Windows 开发环境 (推荐)
- Microsoft Excel (用于测试 RTD 功能)### 运行环境
- Windows 7/10/11
- Microsoft Excel 2010 或更高版本
- WPS Office## ⚡ 快速开始
### 1. 克隆项目
```bash
git clone https://github.com/mwmi/excel-rtd-server.git
cd RTDServer
```### 2. 构建项目
#### 使用默认构建器 (MSBuild/Make)
```bash
mkdir build
cd build
cmake ..
cmake --build . --config Release
```#### 使用 Ninja 构建器 (推荐,更快的构建速度)
```bash
mkdir build
cd build
cmake -G Ninja ..
ninja
```#### 指定构建类型的 Ninja 构建
```bash
# Debug 构建
cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug ..
ninja# Release 构建
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ..
ninja
```### 3. 注册 COM 组件
**🎉 新特性**: RTDServer 现在支持智能权限检测,会自动选择合适的注册方式!
#### 方法一:使用预编译DLL(推荐)
根据不同位数的 Excel 版本,选择对应的注册命令:```bash
# 进入dll目录
cd dll# 64位 Excel
regsvr32 RTDServer64.dll# 32位 Excel 或 WPS
regsvr32 RTDServer32.dll
```**智能注册机制**:
- ✅ **有管理员权限**: 自动注册到 `HKEY_LOCAL_MACHINE`,所有用户可用
- ✅ **普通用户权限**: 自动注册到 `HKEY_CURRENT_USER`,当前用户可用
- ✅ **无需手动判断**: DLL会自动检测并选择最佳注册方式#### 方法二:使用自编译DLL
如果使用自己编译的DLL,请根据构建架构选择:```bash
# 进入构建目录
cd build# 64位版本
regsvr32 RTDServer64.dll# 32位版本
regsvr32 RTDServer32.dll
```#### 注册状态验证
```bash
# 方法1: 使用测试程序验证
./test.exe# 方法2: 直接在Excel中测试
# 输入: =RTD("RTDServer","","clock")
```### 4. 在 Excel 中使用
在 Excel 单元格中输入以下公式:
```excel
=RTD("RTDServer","","clock") # 显示实时时钟
=RTD("RTDServer","","file","C:\path\to\file.txt") # 读取文件内容
=RTD("RTDServer","","web","https://example.com") # 获取网页内容
=RTD("RTDServer","","cmd","dir") # 执行命令
=RTD("RTDServer","","path") # 获取当前路径
```## 🎯 自定义功能示例
### 1. 显示时钟 (clock)
显示实时时间,每500毫秒更新一次
```excel
=RTD("RTDServer","","clock")
```### 2. 文件读取 (file)
读取指定文件的内容
```excel
=RTD("RTDServer","","file","C:\data\info.txt")
```### 3. 网页内容 (web)
获取指定网页的内容
```excel
=RTD("RTDServer","","web","https://api.example.com/data")
```### 4. 命令执行 (cmd)
执行系统命令并返回结果
```excel
=RTD("RTDServer","","cmd","ipconfig")
```### 5. 路径获取 (path)
获取当前工作目录
```excel
=RTD("RTDServer","","path")
```## 🏗️ 核心架构
### 类图结构
```
IRtdServer (接口)
↑
RtdServer (实现类)
↓
Topic (数据主题管理)
```### 主要组件
1. **RtdServer**: 核心服务器类,实现 RTD 接口
2. **Topic**: 数据主题类,管理单个数据项的生命周期
3. **Task**: 任务系统,支持同步/异步数据获取
4. **COM Factory**: COM 组件工厂,负责对象创建### 数据流程
1. Excel 调用 `ConnectData` 创建数据主题
2. 服务器创建对应的 `Topic` 对象和任务
3. 后台线程执行任务,更新数据
4. 数据变化时通知 Excel 刷新
5. Excel 调用 `RefreshData` 获取最新数据## 🔧 开发指南
### 添加新的数据源
1. 在 `main.cpp` 的 `createRtdTask` 函数中添加新的处理逻辑
2. 创建相应的任务函数
3. 设置任务属性(同步/异步、运行次数等)示例:
```cpp
if (firstArg == L"custom") {
topic->setTask([](Topic *topic) -> int {
// 自定义数据获取逻辑
topic->setValue(L"自定义数据");
return 0;
});
return 0;
}
```### 编译选项
- **Debug 模式**: 包含调试信息,便于开发调试
- **Release 模式**: 启用 LTO 优化,减小文件体积## 🧪 测试
### Excel 测试
1. 注册 DLL: `regsvr32 RTDServer.dll`
2. 打开 Excel
3. 输入 RTD 公式测试各种功能
4. 观察数据实时更新### 独立测试程序
项目包含独立的COM组件测试程序,无需Excel即可验证DLL功能:
```bash
# 构建测试程序
cmake --build . --target test# 运行测试(需要先注册DLL)
./test.exe
```### Excel测试文件
项目提供了 `test.xlsx` 测试文件,包含各种RTD函数示例,可直接打开测试。
## 📝 配置说明
### CMake 配置选项
- `CMAKE_BUILD_TYPE`: 构建类型 (Debug/Release)
- `CMAKE_CXX_STANDARD`: C++ 标准版本 (23)
- `-G Ninja`: 使用 Ninja 构建器### 性能调优
- 修改 `runing_ms` 调整更新频率
- 调整 `m_HeartbeatInterval` 设置心跳间隔
- 使用异步任务处理耗时操作
- 使用 Ninja 构建器提升开发效率## 🔒 安全注意事项
- 命令执行功能存在安全风险,请在受控环境中使用
- 网页抓取功能需要网络权限
- 文件读取需要相应的文件系统权限## 🐛 已知问题
1. WPS启动后不加载 DLL, 导致函数无法正常更新
2. 某些杀毒软件可能误报 DLL 文件
3. Excel 关闭时可能出现线程清理延迟
4. 大文件读取可能影响 Excel 响应性能## 🔄 更新日志
### v0.2.0 (2025-08-30)
**🎆 新特性**
- ✨ 新增智能权限检测功能
- 🔒 支持用户级COM组件注册,无需管理员权限
- ⚙️ 优化注册表结构,提高注册效率
- 🛡️ 新增 `CanWriteToHKLM()` 权限检测函数
- 📝 更新文档,添加注册状态验证指南**🔧 技术改进**
- 重构 `DllRegisterServer()` 和 `DllUnregisterServer()` 函数
- 优化错误处理机制
- 简化注册表项配置**🎉 用户体验提升**
- 无需手动判断权限级别
- 自动选择最佳注册策略
- 提供更友好的错误反馈---
## 💬 贡献指南
1. Fork 项目
2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 打开 Pull Request## 📄 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情
## 📞 联系方式
- 项目链接: [GitHub Repository]
- 问题反馈: [Issues]
- 文档: [Wiki]## 🙏 致谢
- Microsoft RTD 接口文档
- CMake 社区
- Ninja 构建系统
- C++ 标准委员会---
**注意**: README 为AI生成, 内容仅供参考。