Сохранить документ Visio как HTML

Я пытаюсь преобразовать множество файлов Visio из .vsd в .html, но в каждом файле много страниц, поэтому мне нужно преобразовать все страницы в один файл .html.

Используя приведенный ниже код Python, я могу преобразовать его в PDF, но мне действительно нужен HTML. Я заметил, что могу использовать win32com.client.Dispatch("SaveAsWeb.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)

person forkd    schedule 20.04.2018    source источник
comment
Вы пробовали записать макрос? Всякий раз, когда я хочу выяснить, как автоматизировать продукт Office, я записываю макрос, в котором я вручную выполняю операцию, а затем смотрю на код, чтобы понять, как сам продукт выполнил операцию в ответ на мой пользовательский ввод.   -  person Michael Gunter    schedule 20.04.2018
comment
Почему Python, а не VBA, встроенный в Visio и готовый к работе?   -  person AJD    schedule 21.04.2018


Ответы (1)


Визио так не может. Вы не можете «конвертировать все страницы в один файл HTML». У вас будет «корневой» файл и папка «вспомогательных» файлов.

VisSaveAsWeb довольно хорошо задокументирован, не нужно гадать: https://msdn.microsoft.com/en-us/vba/visio-vba/articles/vissaveasweb-object-visio-save-as-web

-- Обновить

С питоном оказалось не так уж и тривиально разобраться с SaveAsWeb. Кажется, по умолчанию используется пользовательский интерфейс (без отправки). Я не думаю, что с этим можно справиться с помощью библиотеки win32com, но с comtypes, похоже, работает ( библиотека 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)

Кроме этого, вы можете попробовать интерфейс «командной строки»: http://visualsignals.typepad.co.uk/vislog/2010/03/automating-visios-save-as-web-output.html

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)

Кроме этого, вы можете попробовать мой visio svg-export :)

person Nikolay    schedule 20.04.2018
comment
На самом деле Visio делает это через графический интерфейс. Я хочу автоматизировать это. - person forkd; 23.04.2018
comment
Visio НЕ сохраняет html в виде одного файла. Проверьте свой диск, и вы найдете папку с именем ‹ваше имя файла›_files - person Nikolay; 23.04.2018
comment
1 (один) файл HTML и папка с ресурсами, связанными с этим файлом. Это как раз то, что мне нужно. - person forkd; 24.04.2018
comment
Отлично, но я не знаю, как использовать его с Python. Смотрите мой код: pastebin.com/3THMj0e0 :) - person forkd; 27.04.2018
comment
Кажется, теперь у меня есть проблема - сохранить как веб-сайт, используя пользовательский интерфейс. Поэтому из python с этим не так просто справиться (win32com не поддерживает пользовательские интерфейсы, но вместо этого вы можете использовать comtypes - он поддерживает). Я обновил ответ. - person Nikolay; 02.05.2018
comment
Работал на меня! Большое спасибо! - person forkd; 14.05.2018
comment
Моя последняя работа здесь, и тема будет помечена как решенная: /а> - person forkd; 18.05.2018