import os
import win32com.client as win32
def replace_placeholder_with_visio(docx_file, visio_file, output_file):
word_app = None
visio_app = None
word_doc = None
visio_doc = None
try:
# Проверка существования файлов
if not os.path.exists(docx_file):
raise FileNotFoundError(f"Файл Word не найден: {docx_file}")
if not os.path.exists(visio_file):
raise FileNotFoundError(f"Файл Visio не найден: {visio_file}")
# Инициализация COM-объектов для работы с Word и Visio
word_app = win32.Dispatch("Word.Application")
visio_app = win32.Dispatch("Visio.Application")
# Открываем документ Word
word_doc = word_app.Documents.Open(docx_file)
word_app.Visible = False # Скрываем Word при работе
# Проверяем, что документ успешно открыт
if word_doc is None:
raise RuntimeError("Не удалось открыть документ Word.")
# Поиск слова "PASTESCHEME" в документе
word_range = word_doc.Content # Получаем весь контент документа
find = word_range.Find
find.Text = "PASTESCHEME"
found = find.Execute()
if found:
print("Слово 'PASTESCHEME' найдено. Вставка схемы Visio...")
# Открываем файл Visio
visio_doc = visio_app.Documents.Open(visio_file)
# Копируем первую страницу Visio в буфер обмена
visio_page = visio_doc.Pages.Item(1)
temp_image_path = r"C:\temp\visio_image.emf"
visio_page.Export(temp_image_path) # Экспорт в EMF для вставки как объект
visio_doc.Close(SaveChanges=0) # Закрываем документ Visio без сохранения изменений
# Вставка объекта Visio вместо найденного слова
word_range.PasteSpecial(Link=False, DataType=15) # 15 - тип данных для OLE-объекта
# Удаляем текст "PASTESCHEME", если он остался
word_range.Text = "" # Очищаем найденный текст
else:
print("Слово 'PASTESCHEME' не найдено в документе.")
# Сохраняем измененный документ
word_doc.SaveAs(output_file)
print(f"Документ успешно сохранен: {output_file}")
except Exception as e:
print(f"Произошла ошибка: {e}")
finally:
# Освобождаем ресурсы
if word_doc:
word_doc.Close(SaveChanges=0)
if word_app:
word_app.Quit()
if visio_doc:
visio_doc.Close(SaveChanges=0)
if visio_app:
visio_app.Quit()
# Пути к файлам
docx_file = r"C:\Users\Администратор\Documents\RecomendBaseTpl.docx"
visio_file = r"C:\Users\Администратор\Documents\standalone.vsdx"
output_file = r"C:\Users\Администратор\Documents\output.docx"
# Вызов функции
replace_placeholder_with_visio(docx_file, visio_file, output_file)