在Linux下调用EXCEL(XLSM)文件,并执行里面的VBA宏,这个看似是个伪需求;但做过办公自动化的都知道,在10几20年前,VBA宏是办公自动化里面最简单,并最不可或缺的一环,甚至现在有很多科研机构,政府机关,都还在使用着这个最原始的办公自动化和数据自动化分析的方法;
而现在越来越多的系统,已经转向虚拟化和Linux化平台,甚至一些已经上了超融合,K8s,这时候一些ERP,MES,PLM等系统,对于原来的办公自动化流程的兼容性就显得捉襟见肘,很多单位并不希望丢弃原来的流程以及成果,特别是科研机构,很多是使用VBA来做数据分析的,里面涵盖很大量的数据分析方法,如果希望将这部分的成果延续,并放到Linux下作为模板运行输出结果,传统方案是做不到的,必须得在Windows下环境运行,或者通过虚拟机实现;但着又违背了超融合的环境依赖安全性;
迫于无奈,花了些时间自研了一套基于Linux环境下能跑Office的Docker,并利用python来运行Excel里面的VBA宏,同时将得到的结果输出到原来的XLSM文件内;
https://github.com/xeden3/docker-excel-macro-run
这个是项目地址;
安装和使用也非常简单
这个 Docker 容器提供了一种使用 Python win32 在 Wine 和 Office 环境下运行 Excel 宏的解决方案。它支持通过 GitHub 和 Docker Hub 安装。下面是安装和使用的步骤。
GitHub 安装和构建
git clone https://github.com/xeden3/docker-excel-macro-run.git
cd docker-excel-macro-run
docker build -t docker-excel-macro-run:v1 .
Docker Hub 安装
docker pull xeden3/docker-excel-macro-run:v1
运行程序,执行example.xlsm下的宏ThisWorkbook.WriteDataToSheet1
docker run -v ./example.xlsm:/opt/wineprefix/drive_c/test.xlsm --rm docker-excel-macro-run:v1 test.xlsm ThisWorkbook.WriteDataToSheet1
如果成果,则输出json如下
{"errcode": 0, "errmsg": ""}
参数解释:
docker-excel-macro-run:v1
:Docker 镜像名称和标签。test.xlsm
:要运行宏的 Excel 文件名。它应该与容器目录中的文件名 (/opt/wineprefix/drive_c/test.xlsm
) 相匹配。ThisWorkbook.WriteDataToSheet1
:要执行的宏命令。
现在项目已经用在了我们的MES产品里面,并得到了比之前虚拟机运行windows更好的效果,对于高可用和分布式负载都有更好的支持,但也不得不说wine的效率的确会比原生windows的差,因此运行效率会因为启动docker和wine环境有所损耗,但10s和12s的差别,应该不是需要考虑的问题。
如果在使用过程中遇到什么问题,欢迎留言或者在github项目地址上做 Issues 。