在unix环境中从python执行excel宏

u5i3ibmn  于 8个月前  发布在  Unix
关注(0)|答案(2)|浏览(69)

任何人都可以分享任何代码片段,在unix环境下使用python代码执行execl宏吗?
我试过使用xlwings,但它不支持unix环境。
用例:我有一个数据透视表报告在Excel中与过滤器和使用宏,我们要改变过滤器的值。

nzrxty8p

nzrxty8p1#

在Unix环境中,执行Excel宏确实具有挑战性,因为不支持xlwings等工具。
但是,您可以尝试使用Python库和外部应用程序的组合来实现这一点。
但您需要:

  • 使用Wine虚拟化Windows应用程序以执行Windows宏。
  • 用于阅读/写入Excel文件的东西,如openpyxl

这意味着,您必须安装:

  • Unix环境中的Wine(sudo apt update + sudo apt install wine)。

它将允许您在类Unix操作系统上运行Windows应用程序。

  • 使用Wine的Windows version of Python。您将在此Python安装中运行一个脚本来触发宏。
  • pywin32(在您的 Windows Python环境中),win32com库:wine python -m pip install pywin32
  • openpyxl库(在您的 Unix Python环境中)用于读取和操作Excel文件(pip install openpyxl

创建一个Python脚本(例如,名为run_macro.py),该脚本将通过Wine在Windows Python环境中执行。该脚本应该利用win32com库来运行宏。

import os
import sys
from win32com.client import DispatchEx

def run_excel_macro(file_path, macro_name):
    xl = DispatchEx("Excel.Application")
    xl.Workbooks.Open(file_path)
    xl.Application.Run(macro_name)
    xl.Application.Save()  # Save the changes
    xl.Application.Quit()  # Quit Excel
    del xl

if __name__ == "__main__":
    run_excel_macro(sys.argv[1], sys.argv[2])

在Unix环境中创建一个Python脚本trigger_macro_unix.py,通过Wine触发上面的run_macro.py脚本。您可以使用subprocess调用Wine并执行脚本:

import subprocess

def call_macro_through_wine(file_path, macro_name):
    subprocess.run(["wine", "python", "path/to/run_macro.py", file_path, macro_name], check=True)

if __name__ == "__main__":
    call_macro_through_wine("path/to/excel_file.xlsm", "MacroName")

现在,您可以执行Unix Python脚本trigger_macro_unix.py,通过Wine和Windows Python环境调用您的宏:

python3 path/to/trigger_macro_unix.py

请将“path/to/run_macro.py“、“path/to/excel_file.xlsm“和“MacroName“替换为实际的文件路径和宏名称。

vx6bjr1n

vx6bjr1n2#

你走进死胡同了。Excel Excel Excel宏使用底层Windows COM服务与真正的Excel进程通信,该进程进而操作文件。换句话说,即使在真正的Windows系统中,您也需要安装Microsoft Office才能运行这些宏,无论调用语言是什么。
我个人在没有安装Microsoft Office的Windows机器上遇到过这个问题(由于许可证原因,只有LibreOffice),尽管正确安装了pywin 32,但我无法执行宏。
从Linux的唯一可能性是直接操纵Excel文件与openpyxl.这绝对不同于通过Excel宏使用Excel引擎!

相关问题