Python 将Visio文档另存为HTML

Python 将Visio文档另存为HTML,python,com,visio,win32com,Python,Com,Visio,Win32com,我正在尝试将许多Visio文件从.vsd转换为.html,但每个文件都有很多页面,因此我需要将所有页面转换为单个.html文件 使用下面的Python代码,我能够转换为PDF,但我真正需要的是HTML。我注意到我可以使用win32com.client.DispatchSaveAsWeb.VisSaveAsWeb,但是如何使用它呢?有什么想法吗 import sys import win32com.client from os.path import abspath f = abspath(

我正在尝试将许多Visio文件从.vsd转换为.html,但每个文件都有很多页面,因此我需要将所有页面转换为单个.html文件

使用下面的Python代码,我能够转换为PDF,但我真正需要的是HTML。我注意到我可以使用win32com.client.DispatchSaveAsWeb.VisSaveAsWeb,但是如何使用它呢?有什么想法吗

import sys
import win32com.client

from os.path import abspath


f = abspath(sys.argv[1])

visio = win32com.client.Dispatch("Visio.InvisibleApp")
doc = visio.Documents.Open(f)
doc.ExportAsFixedFormat(1, '{}.pdf'.format(f), 0, 0)

visio.Quit()
exit(0)

Visio无法做到这一点。不能将所有页面转换为单个HTML文件。您将拥有一个根文件和一个支持文件文件夹

VisSaveAsWeb有很好的文档记录,无需猜测:

-更新

使用python,处理SaveAsWeb并不是那么简单。它似乎默认为自定义接口非分派。我认为使用win32com库不可能解决这个问题,但comtypes库正在基于类型库构建客户端,也就是说,它还支持自定义接口:

import sys
import comtypes

from comtypes import client
from os.path import abspath

f = abspath(sys.argv[1])

visio = comtypes.client.CreateObject("Visio.InvisibleApp")
doc = visio.Documents.Open(f)

comtypes.client.GetModule("{}\\SAVASWEB.DLL".format(visio.Path))

saveAsWeb = visio.SaveAsWebObject.QueryInterface(comtypes.gen.VisSAW.IVisSaveAsWeb)
webPageSettings = saveAsWeb.WebPageSettings.QueryInterface(comtypes.gen.VisSAW.IVisWebPageSettings)

webPageSettings.TargetPath = "{}.html".format(f)
webPageSettings.QuietMode = True

saveAsWeb.AttachToVisioDoc(doc)
saveAsWeb.CreatePages()

visio.Quit()
exit(0)
除此之外,您还可以尝试命令行界面:


除此之外,您还可以尝试我的visio svg导出:

是否尝试录制宏?每当我想知道如何自动化一个Office产品时,我都会记录下我手动执行该操作的宏,然后查看代码以了解产品本身是如何响应我的用户输入执行该操作的。为什么是Python而不是VBA,它内置于Visio中,开箱即用?事实上,Visio是通过GUI实现的。我想要的是实现自动化。Visio不会将html保存为单个文件。检查磁盘,您会发现一个名为_files1的文件夹、一个HTML文件和一个包含与该文件相关资源的文件夹。这正是我需要的。很好,但我不知道如何在Python中使用它。查看我的代码::现在我似乎遇到了一个问题-另存为web正在使用自定义界面。因此,从python来看,处理win32com不支持自定义接口这一点并不简单,但您可以改为使用comtypes—它支持自定义接口。我已经更新了答案。
import sys
import win32com.client

from os.path import abspath

f = abspath(sys.argv[1])

visio = win32com.client.Dispatch("Visio.InvisibleApp")
doc = visio.Documents.Open(f)
visio.Addons("SaveAsWeb").Run("/quiet=True /target={}.htm".format(f))

visio.Quit()
exit(0)