【发布时间】:2016-07-08 18:09:37
【问题描述】:
鉴于here 和 [.
的答案,似乎 win32api 应该能够做到这一点我想使用 python 从 excel 工作簿 (.xls) 中删除所有模块
【问题讨论】:
-
观察到相同的行为。
鉴于here 和 [.
的答案,似乎 win32api 应该能够做到这一点我想使用 python 从 excel 工作簿 (.xls) 中删除所有模块
【问题讨论】:
考虑使用可通过 Python 的 win23com.client 模块访问的 COM 接口中的 VBComponents collection。但是,在特定工作簿中,您需要先授予programmatic access to the VBA object library。
此外,您需要有条件地设置类型,因为此过程无法删除对象模块,包括工作表 (Type = 100) 和工作簿 (Type = 100)。只能删除标准模块 (Type = 1)、类模块 (Type = 2)、用户窗体 (Type= 3) 和其他插入的组件。当然,您可以遍历要删除的已定义模块列表。 Try/Except 语句用于有效地关闭 Excel.Application 进程,无论脚本是否失败。
import win32com.client
# OPEN EXCEL APP AND WORKBOOK
xlApp = win32com.client.Dispatch("Excel.Application")
xlwb = xlApp.Workbooks.Open("C:\\Path\\To\\Workbook.xlsm")
# ITERATE THROUGH EACH VB COMPONENT (CLASS MODULE, STANDARD MODULE, USER FORMS)
try:
for i in xlwb.VBProject.VBComponents:
xlmodule = xlwb.VBProject.VBComponents(i.Name)
if xlmodule.Type in [1, 2, 3]:
xlwb.VBProject.VBComponents.Remove(xlmodule)
except Exception as e:
print(e)
finally:
# CLOSE AND SAVE AND UNINITIALIZE APP
xlwb.Close(True)
xlApp.Quit
xlApp = None
【讨论】:
【讨论】:
formatting_info=True 时open_workbook method)?我正在参考xlrd.readthedocs.io/en/latest/api.html 和您在评论中的注释。