如何复制word文档的内容?

问题描述 投票:0回答:2

我想编写一个程序,从 Word 文档复制文本并将其粘贴到另一个文档。我正在尝试使用

python-docx
库来做到这一点。我可以使用以下代码来做到这一点,但它不会复制bolditalic、下划线或彩色部分,而仅复制它们的文本:

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')
python ms-word styles python-docx
2个回答
8
投票

为了复制文本及其样式,您需要编写自己的函数,因为没有

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. 检查粗体斜体和下划线每种样式是否为
    True
    False
    None
    。如果是
    True
    ,则该行将采用该样式,如果是
    False
    ,则不会采用该样式,如果是
    None
    ,则将继承其所在段落的默认样式。然后它将样式应用到运行中。
  4. 检查 RGB 中运行的颜色是什么,并将找到的颜色应用于
    run
  5. 检查运行的字体是什么并将找到的字体应用于
    run
  6. 检查运行的对齐情况并将找到的对齐设置应用于
    run

如何使用该功能:

您需要为其指定输出文档的名称以及要复制的段落。 例如:

# 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')

0
投票

老实说,我会直接复制文件,然后进行编辑。

import shutil

source_file = open('source.docx', 'rb')

dest_file = open('destination.docx', 'wb')

shutil.copyfileobj(source_file, dest_file)
© www.soinside.com 2019 - 2024. All rights reserved.