Python 和 Visio 365:自动保存为 .svg

Python and Visio 365: automated saving to .svg

我想创建一个脚本来打开 Visio 文件 (.vsd),将其保存到 vsdx、pdf 和 svg(vsd 的每一页都是单独的文件),关闭文件,打开下一个文件直到结束文件。

到目前为止,我已成功将其保存为 .pdf,方法是:Python Visio to pdf

import win32com.client

#change later to dynamic current path
path= r"C:/automation_visio/"

visio = win32com.client.Dispatch("Visio.Application")
doc = visio.Documents.Open(path+'test.vsd')
doc.ExportAsFixedFormat( 1, path+'test.pdf', 1, 0 ) #exports as pdf only XD

我查看了很多地方(最相关的:https://docs.microsoft.com/en-us/office/vba/api/visio.document.saveas)但无济于事 - 我不知道如何保存到手动 "SaveAs" 可用的其他文件类型。

编辑:我还需要知道如何浏览页面(获取页面列表并遍历它们并保存到 svg 文件)和(可耻地)如何在文件导出后正确关闭文件。

您需要使用 page.Export 方法而不是 ExportAsFixedFormat。只需为目标文件提供 .svg 扩展名,就可以了。

顺便说一句,我有一个 Visio 加载项(检查配置文件),它向导出添加了一些有用的东西,例如连接、属性等,供 JavaScript 使用。它也可以通过编程方式调用。

我想补充一点,从 Visio 导出 SVG 有两个选项。通常,Visio 会添加一堆额外的数据,例如用户定义的单元格、图层和形状数据字段。如果您想针对导出进行编程,或者在将来某个时间重新导入到 Visio,这会很有用。

但是,如果您想要小巧、干净的 SVG,就不会想要所有这些额外的东西。因此,您可以 fiddle 和 Visio.Application.ApplicationSettings.SVGExportFormat,将其设置为以下之一:

// (0) Include both SVG elements and Visio elements. This is the default.    
Visio.VisSVGExportFormat.visSVGIncludeVisioElements 

// (1) Include SVG elements only. 
Visio.VisSVGExportFormat.visSVGExcludeVisioElements 

添加到 SVG 导出的额外 Visio 信息很容易找到,只需查找带有 "v:" 前缀的元素。