如何复制word文档的内容?

时间:2018-02-19 15:36:37

标签: python ms-word styles python-docx

我想编写一个程序,从Word文档中复制文本并将其粘贴到另一个文档。我正在尝试使用python-docx库。我能够使用以下代码执行此操作,但它不会复制粗体斜体,带下划线或有颜色的部分,因为它们只是它们的文本:

from docx import Document


input = Document('SomeDoc.docx')

paragraphs = []
for para in input.paragraphs:
    p = para.text
    paragraphs.append(p)

output = Document()
for item in paragraphs:
    output.add_paragraph(item)
output.save('OutputDoc.docx')

我还尝试将paragraph对象直接复制到输出文档中,但它也不起作用:

from docx import Document


input = Document('SomeDoc.docx')
output = Document()

for para in input.paragraphs:
    output.add_paragraph(para)
output.save('OutputDoc.docx')

1 个答案:

答案 0 :(得分:1)

为了使用其样式复制文本,您需要编写自己的函数,因为没有python-docx函数可以执行此类操作。 这是我写的功能:

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()
    for run in paragraph.runs:
        output_run = output_para.add_run(run.text)
        # 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
        # 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
    output_para.paragraph_format.alignment = paragraph.paragraph_format.alignment

功能的工作原理

  1. 向文件添加新的paragraph对象。
  2. 在该段落中添加新的run
  3. 检查每个样式粗体斜体和下划线是TrueFalseNone。如果它是True,则运行将采用该样式,如果它是False,则不会采用该样式,如果是None,则它将以默认样式继承它所在的段落。然后它将样式应用于运行。
  4. 检查RGB运行的颜色,并将找到的颜色应用于run
  5. 检查运行的字体是什么,并将找到的字体应用于run
  6. 检查运行的对齐方式,并将找到的对齐设置应用于run
  7. 如何使用功能:

    您需要为其提供输出文档的名称和要复制的段落。 例如:

    # Imports
    
    input_doc = Document('InputDoc.docx')
    output_doc = Document()
    
    # Call the function
    get_para_data(output_doc, input_doc.paragraphs[3])
    
    # Save the new file
    output_doc.save('OutputDoc.docx')
    

    如果您想要复制整个文档,我建议您这样做:

    for para in input_doc.paragraphs:
        get_para_data(output_doc, para)
    
    output_doc.save('OutputDoc.docx')