Я использую библиотеку 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 также неверны.