【问题标题】:Has anyone tried running macro embedded in a microsoft word document from Python有没有人尝试过从 Python 运行嵌入在 Microsoft Word 文档中的宏
【发布时间】:2019-05-23 07:08:59
【问题描述】:

我在 word 2013 中有一个宏,它可以删除空格并调整页面宽度大小以确保表格适合。 目前,为了对文档进行这些更改,用户需要先运行宏,并且只有在运行宏之后,当他们打印文档时,才能确保所做的更改。

我想自动化运行宏的部分

这是用于格式化 word doc 以确保文档中的表格适合页面。

import os
import time
import win32com.client
from docx import Document


macro_to_run = 'PostProcess'
document = 
   wordapp.Documents.Open('C:\\Users\\sarvesa\\Downloads\\test_xrd.doc')
wordapp.run(document, macro_to_run)
document.save
document.close

Traceback(最近一次调用最后一次): 文件“filename_change.py”,第 12 行,在 wordapp.run(文档,macro_to_run) getattr 中的文件“C:\Users\sarvesa\AppData\Local\Programs\Python\Python36-32\lib\site-packages\win32com\client\dynamic.py”,第 516 行 ret = self.oleobj.Invoke(retEntry.dispid,0,invoke_type,1) pywintypes.com_error: (-2147352567, '发生异常。', (0, 'Microsoft Word', "'Run' 不是属性。", 'wdmain11.chm', 25342, -2146822426), None)

【问题讨论】:

  • 你如何定义wordapp?如果根据您当前的代码是我的想法,请尝试wordapp.Application.Run(macro_to_run)

标签: python-3.x win32com


【解决方案1】:

假设“wordapp”是单词的实例,这样调用:

wordapp = win32com.client.DispatchEx("Word.application")

那么有两个问题: 1)您缺少“应用程序” 2)这些方法都是从VBA继承的,这意味着你需要使用那个语法。这包括外壳! 我也不得不用谷歌搜索很多这些信息并将其编译成一个工作脚本。我建议您也阅读一些 VBA 教程。

试试:

wordapp.Application.Run(macroName)

编辑: 此外,您的“macro_to_run”可能还不够。 您不仅需要指定模块名称,还需要指定要运行的 Sub: 赞"Normal.Module1.SubName"

【讨论】:

    猜你喜欢
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多