Задать вопрос
rudieduddie
@rudieduddie
Python-dev and student

Как скопировать часть одного документа docx в другой из Python?

Здравствуйте, я столкнулся с каверзной, но очень интересной задачей.

Мне нужно написать функцию на python, которой передают 5 значений:
source_docx # path - docx файл, из которого нужно забрать данные
outputdocx # path - docx, в который они будут вставлены
trimStart # str - фраза, с которой нужно обрезать данные (к примеру, "глава 1")
trimEnd # str - фраза, по которую данные будут обрезаны (к примеру, "глава 2")
relpace # str - строчка в outputdocx, которую нужно заменить ( к примеру {{replaceme}})


Самый сок этого всего - необходимо сохранить форматирование, а также перенести все таблицы, ссылки, изображения и бог знает что ещё, что находится между trimStart и trimEnd

Я бы хотел спросить у опытных людей, какой подход избрать, чтобы пролить минимум слёз :)

За время изучения вопроса, я уже понял, что библиотека python-docx не позволяет сохранить стили и переносить изображения, так как структура документа-донора не известна заранее.

Это действие очень просто совершить человеку - буфер обмена в Windows сохраняет и форматирование и все элементы документа. Я склоняюсь к записи действий с помощью кого-нибудь вроде win32com.

Также есть библиотека C# Syncfusion, в которой такая find and replace уже реализована, но ... python =(

Ещё есть макросы, но я пока совсем не понимаю, как их привязать к функции в python.

В общем, если вы сталкивались с такой задачей или у вас есть какие-то мысли - помогите мне, пожалуйста
  • Вопрос задан
  • 990 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@PavelMos
Если именно из файла, то, скорей всего, напрямую никак. Только разархивировать .DOCX и вручную искать в соответствующих файлах содержимое , описывающими текст в начале и в конце фразы. по словам и тегам. Но не факт, что скопированный текст можно будет сохранить как валидный DOCX, потому что в DOCX очень сложная структура. То есть нужно будет еще много чего дополнительно создать, прежде чем запаковать это в DOCX.

Думаю, это лучше делать встроенными вордовскими средствами.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
tumbler
@tumbler Куратор тега Python
бекенд-разработчик на python
Берете что-то вроде python-docx и итерируетесь по параграфам и прочим блокам. Пока не нашли trimStart - всё к чертям удаляете :) Т.к. нужное вы не трогаете, есть вероятность, что верстка не поедет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы