我正在使用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 也不对。