python-docx 允许您创建新文档以及对现有文档进行更改。 实际上,它仅允许您对现有文档进行更改。 只是如果您从一个没有任何内容的文档开始,可能乍一看就像是从头开始创建一个文档。

这一特征是强大的。 文档的外观在很大程度上取决于删除所有内容时剩下的部分。 诸如样式,页面页眉和页脚之类的内容与主要内容分开包含,使您可以在起始文档中进行大量自定义,然后再出现在所生成的文档中。

让我们逐步完成一个文档示例的创建步骤,首先从您可以对文档执行的两个主要操作开始,将其打开并保存。

最简单的入门方法是在不指定要打开文件的情况下打开新文档:

from docx import Document
document = Document()
document.save('test.docx')

这将从内置的默认模板中创建一个新文档,并将其原样保存到名为“ test.docx”的文件中。所谓的“默认模板”实际上只是一个没有内容的Word文件,该文件与安装的python-docx 软件包一起存储它与 在选择Word的文件>从模板新建...菜单项后选择Word 文档模板所获得的效果大致相同

真正打开文档

如果要对最终文档进行更多控制,或者要更改现有文档,则需要使用文件名打开一个文档:

document = Document('existing-document-file.docx')
document.save('new-file-name.docx')

注意事项:

  • 您可以通过这种方式打开任何Word 2007或更高版本的文件(Word 2003及更早版本的.doc文件将不起作用)。尽管您可能还不能操纵所有内容,但是其中已经存在的任何内容都可以加载和保存。该功能集仍在构建中,因此您尚不能添加或更改标题或脚注之类的内容,但是如果文档中的python-docx内容足够礼貌,可以使其独立存在,并且足够聪明,可以在不实际了解其含义的情况下保存它们。
  • 如果您使用相同的文件名打开并保存文件,python-docx则将在不窥视的情况下乖乖地覆盖原始文件。您将要确保这就是您想要的。
  • 打开一个“类似文件”的文档

    python-docx可以从所谓的类似文件的对象中打开文档它还可以保存到类似文件的对象。当您想通过网络连接或数据库获取源文档或目标文档,并且不想(或不允许)与文件系统进行交互时,这会很方便。实际上,这意味着您可以传递打开文件或StringIO / BytesIO流对象来打开或保存文档,如下所示:

    f = open('foobar.docx', 'rb')
    document = Document(f)
    f.close()
    with open('foobar.docx', 'rb') as f:
        source_stream = StringIO(f.read())
    document = Document(source_stream)
    source_stream.close()
    target_stream = StringIO()
    document.save(target_stream)
    

    'rb'文件打开方式的参数不需要在所有的操作系统。'r'有时它默认设置为足够,但是Windows和至少某些版本的Linux上需要'b'(选择二进制模式)以允许Zipfile打开文件。

    好的,因此您已经打开了一个文档,并且可以确定以后可以将其保存在某个地方。下一步是在那里获取一些内容……