Как скопировать все абзацы и стили внутри заголовка в другой файл MS Word - PullRequest
1 голос
/ 29 апреля 2019

Я использую библиотеку Python docx и пытаюсь скопировать абзацы под несколькими заголовками во многих файлах .docx в один новый документ Word.

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

Ниже мой код:

from docx import Document
from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Length, Pt
import copy
document = Document("test.docx")

target = Document("target.docx")
styles = target.styles

# for s in document.styles:
#     if s.name not in target.styles:
#         styles = target.styles
#         style = target.styles.add_style(s.name, WD_STYLE_TYPE.PARAGRAPH)
#         style.base_style = styles['Normal']


def get_para_data(output_doc_name, paragraph):
    """
    Write the run to the new file and then set its font, bold, alignment, color etc. data.
    """
    output_para = output_doc_name.add_paragraph()

    output_para.style = paragraph.style

    output_para.paragraph_format.alignment = paragraph.paragraph_format.alignment
    output_para.paragraph_format.space_before = Pt(paragraph.paragraph_format.space_before.pt) if  paragraph.paragraph_format.space_before else None
    output_para.paragraph_format.space_after = Pt(paragraph.paragraph_format.space_after.pt) if  paragraph.paragraph_format.space_after else None
    output_para.paragraph_format.line_spacing_rule = paragraph.paragraph_format.line_spacing_rule
    output_para.paragraph_format.line_spacing = paragraph.paragraph_format.line_spacing
    output_para.paragraph_format.first_line_indent = paragraph.paragraph_format.first_line_indent

    for run in paragraph.runs:
        output_run = output_para.add_run(run.text)
        output_run.font.highlight_color = run.font.highlight_color
        output_run.font.shadow = run.font.shadow
        # output_run.shadow = run.shadow
        # Run's bold data
        output_run.bold = run.bold
        # Run's italic data
        output_run.italic = run.italic
        # Run's underline data
        output_run.underline = run.underline
        output_run.font.name = run.font.name
        output_run.font.size = run.font.size
        # Run's color data
        output_run.font.color.rgb = run.font.color.rgb
        # Run's font data
        output_run.style.name = run.style.name
    # Paragraph's alignment data

# for s in document.styles:
#     if s.name not in target.styles:
#         styles = target.styles
#         style = target.styles.add_style(s.name, WD_STYLE_TYPE.PARAGRAPH)
#         style.base_style = styles['Normal']

for para in document.paragraphs:
    get_para_data(target, para)

target.save("target.docx")

Я пытался вручную импортировать стили в target.docx, но стиль все равно не тот.

Мой вопрос: как правильно скопировать и вставить абзацы с некоторыми измененными стилями в новый документ? Я не против вручную импортировать стиль, потому что в конце мне просто нужно создать один документ.

Если Python не может этого сделать, есть ли способ использовать C #?

Межстрочный интервал и space_before / after также неверны.

...