要有效管理 Word 文档,通常需要将文档拆分成更小的部分。然而,手动执行这项任务既耗时又耗力。幸运的是,Spire.Doc for Python 提供了一种方便高效的方法,可以通过编程来拆分 Word 文档,帮助用户提取文档的特定部分,将冗长的文档拆分成小块,并简化数据提取。本文演示了如何使用 Spire.Doc for Python 在 Python 中将 Word 文档拆分成多个文档。
由于文档内容的动态性质,Word 文档的拆分通常是通过分页符和分节符完成的。因此,本文将重点讨论以下两个部分:
安装 Spire.Doc for Python
本教程需要 Spire.Doc for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Doc
如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.Doc for Python
Python 按分页符拆分 Word 文档
分页符允许对文档进行强制分页,从而实现对内容的固定划分。通过使用分页符作为分割,我们可以将 Word 文档拆分成内容相关的小文档。通过分页符拆分 Word 文档的详细步骤如下:
- 创建 Document 类实例,并使用 Document.LoadFromFile() 方法加载 Word 文档。
- 创建一个新文档,使用 Document.AddSection() 方法为其添加一个章节。
- 遍历原始文档中每个部分的所有正文子对象,并检查子对象是段落还是表格。
- 如果子对象是表格,则使用 Section.Body.ChildObjects.Add() 方法将其添加到新文档的章节中。
- 如果子对象是段落,则将段落对象添加到新文档的章节中。然后,遍历段落的所有子对象,检查其中是否有一个子对象是分页符。
- 如果段落中的子对象是分页符,则使用 Paragraph.ChildObjects.IndexOf() 方法获取其索引,并根据索引将其从段落中移除。
- 使用 Document.SaveToFile() 方法保存新文档,并重复上述过程。
- Python
from spire.doc import *
from spire.doc.common import *
# 输入文件名
inputFile = "示例文档.docx"
# 输出文件夹名
outputFolder = "按分页符拆分/"
# 创建一个Document对象
original = Document()
# 从文件中加载原始文档
original.LoadFromFile(inputFile)
# 创建一个新的Document对象
newWord = Document()
# 在newWord中添加一个新的章节
section = newWord.AddSection()
# 将原始文档的默认样式克隆到新文档中
original.CloneDefaultStyleTo(newWord)
# 将原始文档的主题克隆到新文档中
original.CloneThemesTo(newWord)
# 将原始文档的兼容性设置克隆到新文档中
original.CloneCompatibilityTo(newWord)
index = 0 # 初始化索引,用于命名输出文件
# 遍历原始文档中的每个章节
for m in range(original.Sections.Count):
# 获取当前章节
sec = original.Sections.get_Item(m)
# 遍历当前章节中的所有子对象
for k in range(sec.Body.ChildObjects.Count):
obj = sec.Body.ChildObjects.get_Item(k)
# 如果子对象是段落
if isinstance(obj, Paragraph):
# 确保obj是Paragraph类型,如果不是则跳过
para = obj if isinstance(obj, Paragraph) else None
# 克隆当前章节的属性到新章节
sec.CloneSectionPropertiesTo(section)
# 将段落的克隆添加到新章节中
section.Body.ChildObjects.Add(para.Clone())
# 遍历段落中的每个子对象
for j in range(para.ChildObjects.Count):
parobj = para.ChildObjects.get_Item(j)
# 如果子对象是分页符,并且类型为分页
if isinstance(parobj, Break) and (parobj if isinstance(parobj, Break) else None).BreakType == BreakType.PageBreak:
# 获取分页符在当前段落中的索引
i = para.ChildObjects.IndexOf(parobj)
# 从新章节的最后一个段落中移除分页符
section.Body.LastParagraph.ChildObjects.RemoveAt(i)
# 构造输出文件名
resultF = outputFolder
resultF += "结果文件-{0}.docx".format(index)
# 保存新文档到文件
newWord.SaveToFile(resultF, FileFormat.Docx)
# 更新索引和重置新文档
index += 1
newWord = Document()
section = newWord.AddSection()
# 再次克隆原始文档的样式、主题和兼容性到新文档中
original.CloneDefaultStyleTo(newWord)
original.CloneThemesTo(newWord)
original.CloneCompatibilityTo(newWord)
# 克隆当前章节的属性到新章节
sec.CloneSectionPropertiesTo(section)
# 添加当前段落的克隆到新章节中
section.Body.ChildObjects.Add(para.Clone())
# 如果新章节的第一个段落中没有子对象,则移除它
if section.Paragraphs[0].ChildObjects.Count == 0:
section.Body.ChildObjects.RemoveAt(0)
else:
# 否则,从第一个段落的子对象中移除分页符及其后面的内容
while i >= 0:
section.Paragraphs[0].ChildObjects.RemoveAt(i)
i -= 1
# 判断对象obj是否为Table类型
if isinstance(obj, Table):
# 如果是Table类型,则克隆该表格,并添加到section的Body中的ChildObjects中
section.Body.ChildObjects.Add(obj.Clone())
# 文件名格式为:"输出文件夹路径/结果文件-索引值.docx"
result = outputFolder + "结果文件-{0}.docx".format(index)
# 将Word文档保存到指定的路径,文件格式为Docx 2013
newWord.SaveToFile(result, FileFormat.Docx2013)
newWord.Close()
Python 按分节符拆分 Word 文档
章节将 Word 文档划分为不同的逻辑部分,并允许每个章节有独立的格式。通过将 Word 文档分割成不同的部分,我们可以得到多个内容和格式相对独立的文档。通过分段分割 Word 文档的具体步骤如下:
- 创建 Document 类实例,并使用 Document.LoadFromFile() 方法加载 Word 文档。
- 遍历文档中的每个章节。
- 使用 Document.Sections.get_Item() 方法获取一个章节。
- 创建一个新的 Word 文档,并使用 Document.Sections.Add() 方法将原始文档中的部分复制到新文档中。
- 使用 Document.SaveToFile() 方法保存新文档。
- Python
from spire.doc import *
from spire.doc.common import *
# 创建一个Document对象
document = Document()
# 加载名为"示例文档.docx"的Word文档
document.LoadFromFile("示例文档.docx")
# 遍历文档的每个章节(Section)
for i in range(document.Sections.Count):
# 获取当前索引的章节(Section)
section = document.Sections.get_Item(i)
# 构造结果文件的文件名,包括路径和文件名,格式为:"按分节符拆分/结果文件_编号.docx"
result = "按分节符拆分/" + "结果文件_{0}.docx".format(i+1)
# 创建一个新的Word文档对象来存储当前部分的内容
newWord = Document()
# 将当前章节(Section)的克隆添加到新Word文档的Sections中
newWord.Sections.Add(section.Clone())
# 将新Word文档保存到指定的文件名
newWord.SaveToFile(result)
newWord.Close()
document.Dispose()
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。