Копирование диаграммы вручную из Docx в другой приводит к повреждению файлаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Копирование диаграммы вручную из Docx в другой приводит к повреждению файла

Сообщение Anonymous »

Я работаю над требованием копировать содержимое из файла docx и добавлять его в другой, но беспорядок начинается, когда дело доходит до диаграмм.
Я использую python- docx, и поскольку он не поддерживает диаграммы изначально, я делаю следующее:
  • получаю XML-файл прогона диаграммы из document.xml< /code>
  • найти связанная частьchart.xml и соответствующий rId
  • добавьтеchart.xml в целевой документ как новую часть и получите новый rId
  • замените rId в XML-файле шага 1, затем добавьте его в document.xml целевого документа
  • добавить части, связанные с файломchart.xml, в целевой документ и обновите файлchart.xml, добавив в него новые rId
псевдокод:

Код: Выделить всё

from docx import Document
from docx.oxml import parse_xml

chart_doc = Document("chart.docx")
target_doc = Document("target.docx")

for paragraph in chart_doc.paragraphs:
new_para = target_doc.add_paragraph()

for run in paragraph.runs:
run_xml = run.get_xml()

chart_rid = extract_rid(run_xml)
rel = get_rel_by_id(chart_rid)
chart_part = rel.target_part

new_part = create_part(chart_part)
new_rid = target_doc.relate_to(new_part, rel.reltype)

if has_relationships(rel.target_part):
rids = add_related_parts(chart_part, target_doc)
new_part.blob = replace_rids_in_xml(new_part.content, rids).encode()

new_run = parse_xml(run_xml)
new_para.append(new_run)
target_doc.save("target_modified.docx")
Проблема в том, что измененный документ не открывается в Word:

target_modified.docx
Я попробовал проверить это с помощью Инструмента повышения производительности Open XML, есть 2 ошибки, но я не думаю, что они имеют отношение к делу.

(он сообщает о тех же ошибках в обычный файл docx, содержащий диаграммы в виде ну)
Изображение

Изображение

Итак, я бы хотел узнать, в чем проблема с файлом результатов, и какие части мне здесь не хватает, спасибо.
поделюсь всеми тремя файлами docx здесь: py_docx
Я знаю, что эта функция может быть включена в несколько идеальных коммерческих библиотек, но на данный момент мне это не подходит :)

Подробнее здесь: https://stackoverflow.com/questions/793 ... upted-file
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»