如何复制Word文档的内容?

8

我想编写一个程序,可以将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')

我也尝试过直接将段落对象复制到输出文档中,但也无法正常工作:
from docx import Document


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

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

你看过“使用样式”(http://python-docx.readthedocs.io/en/latest/user/styles-using.html)这篇关于“python docx style”的搜索结果吗? - Graipher
1
是的,我尝试过,但仍然无法复制文本段落的样式。 - E. Epstein
1个回答

6
为了复制文本及其样式,您需要编写自己的函数,因为没有 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. 向文件添加一个新的段落对象。
  2. 向该段落添加一个新的运行
  3. 检查加粗、斜体和下划线这些样式是否为TrueFalseNone。如果是True,则该运行将采用该样式;如果是False,则该样式不会应用到运行中;如果是None,则它将被所在段落的默认样式继承。然后将样式应用于运行。
  4. 检查运行的颜色是否为RGB,并将找到的颜色应用于运行
  5. 检查运行的字体,并将找到的字体应用于运行
  6. 检查运行的对齐方式,并将找到的对齐设置应用于运行

如何使用该函数:

你需要给出输出文档的名称以及你想要复制的段落。 例如:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接