如何在新文档中使用现有 docx 文件中的样式?

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

我有一个由队友生成的漂亮的 .docx 文件,我想使用其中的样式作为我通过 python-docx 以编程方式生成的新文档的默认样式。

我可以加载现有的 docx 文件,但不清楚如何在新创建的文档中使用文档中的样式。

我需要对现有文件中使用的每种样式执行以下伪代码吗?

# Read in our template file to enable style reuse
template = Document("MyTemplate.docx")

# Create our new, empty document
doc = Document()
set_style(doc.styles['Heading 1'] = template.styles['Heading 1']
set_style(doc.styles['Title'] = template.styles['Title']
# etc
python python-docx
1个回答
1
投票

python.docx 不直接支持复制样式。当然,我们可以将一个文档中的样式 XML 复制到另一文档的样式 XML 中。看起来像这样:

from docx import Document
from copy import copy

def copy_style(source_document: Document, target_document: Document, style_name: str):
    source_style_names = [style.name for style in source_document.styles]
    target_style_names = [style.name for style in target_document.styles]
    if style_name in source_style_names:
        source_style = source_document.styles[style_name]
        if style_name in target_style_names:
            target_document.styles[style_name].delete()
        target_document.styles.element.append(copy(source_style.element))

template = Document('MyTemplate.docx')

document = Document()

style_name = 'Heading 1'
copy_style(template, document, style_name)
style_name = 'Title'
copy_style(template, document, style_name)
    
document.add_paragraph('Title Text', style='Title')
document.add_paragraph('Heading 1', style='Heading 1')

document.save('output.docx')

但它并不真正可靠,因为源文档中的样式可能引用源文档中的其他样式,其名称在目标文档中未定义。

因此更好的方法是将

MyTemplate.docx
清空并仅提供样式。然后,只需使用样式即可将内容放入从
MyTemplate.docx
创建的文档中。然后使用不同的名称保存结果,以便
MyTemplate.docx
保持为空作为模板。

© www.soinside.com 2019 - 2024. All rights reserved.