有没有人尝试从Python运行嵌入在Microsoft Word文档中的宏

时间:2019-05-23 07:08:59

标签: python-3.x win32com

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

我想自动化运行宏的部分

这是为了格式化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

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

1 个答案:

答案 0 :(得分:0)

提供的“ wordapp”是单词的实例,称为:

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

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

尝试:

wordapp.Application.Run(macroName)

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