python - 如何复制word文档的内容?

标签 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')

最佳答案

为了复制带有样式的文本,您需要编写自己的函数,因为没有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. 检查每种样式粗体斜体和下划线是否为TrueFalse。如果为 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')

关于python - 如何复制word文档的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48869423/

相关文章:

python - 如何遍历数据框的所有行以将查找函数应用于字符串值并将结果应用于新列?

python - 使用 Spacy 进行 Word To Vec,将单词归入同一类别

regex - 在 Word 中使用 VBA 提取两个组词之间的项目符号的 RegExp 模式是什么?

javascript - style.background 与 grb

Delphi: ListView 中不必要的列线和没有 RowSelect (SysListView32)

android - 造型 Sherlock 操作栏下拉项目

python - 如何仅为某些索引设置 Pyomo 索引变量的值并让其他索引自由?

python - 将列表中的每个第二个数字相乘

wpf - 在 wpf 应用程序中嵌入 word 2010 编辑器

javascript - 以编程方式阅读 Microsoft Word 文档