【问题标题】:Is it possible to manipulate Visio drawings programmatically?是否可以通过编程方式操作 Visio 绘图?
【发布时间】:2023-01-26 01:11:00
【问题描述】:

我正在用 Python 开发一个自动文档应用程序。所需的功能之一是绘制流程图。由于用户使用Visio,所以我想生成Visio格式的流程图,这样用户可以在绘图中进行微调,而无需编程技能。我正在通过 VSTO Add-ins for Office 搜索,虽然它看起来可以用于以编程方式制作 Visio 绘图,但尚不清楚是否可以将它与我的 Python 应用程序一起使用。是否可以使用 Python 将信息发送到 VSTO 加载项,并使用它根据此信息在 Visio 中绘制流程图?如何实施?对于如何以用户可以使用矢量图形编辑器编辑的格式以编程方式生成流程图,还有其他建议吗?

【问题讨论】:

  • 这看起来更像是一个“哲学”问题,它不完全是关于编程的。在专用的 Visio 资源(例如 visguy.com/vgforum)上提问这样的问题可能会更幸运。但原则上,使用python生成Visio图表是可以的(前提是python运行在用户所在的同一台机器上,Visio也安装在同一台机器上)。

标签: python win32com visio office-automation


【解决方案1】:

无需与基于 VSTO 的加载项进行通信。您可以通过 Python 脚本自动化任何 MS Office 应用程序(包括 Visio)。我相信 pywin32 可以帮助完成这些任务。

from win32com.client import constants

appVisio = win32com.client.Dispatch("Visio.Application")
appVisio.Visible =1

doc = appVisio.Documents.Add("Basic Diagram.vst")
pagObj = doc.Pages.Item(1)

doc.SaveAs(r'e:	empMyDrawing.vsd')
doc.Close()

win32com 返回一个围绕应用程序提供的 COM 服务器的薄 Python 包装器。 Visio 对象模型的文档是here

请注意,您返回的对象是薄 Python 包装器中的 COM 对象,因此并不总是表现得像 Python 对象,并且文档假定您是用 VBA 而不是 Python 编写的。

【讨论】: