Как разделить документы Word по страницам или разделам с помощью Python
Большие документы Word часто проще обрабатывать, когда они разделены на более мелкие файлы. Возможно, вы захотите отделить первые несколько страниц отчёта, разбить документ по границам разделов или создать отдельные файлы Word для разных глав.
Хотя Microsoft Word может выполнять эти задачи вручную, повторение процесса для множества документов быстро становится неэффективным. С помощью Spire.Doc for Python вы можете программно разделять документы Word, сохраняя их исходное содержимое и форматирование.
В этой статье мы рассмотрим два практических подхода:
Разделение документа Word по диапазону страниц
Разделение документа Word на отдельные файлы по разделам
Установка Spire.Doc for Python
Перед запуском примеров установите Spire.Doc for Python с помощью pip:
pip install Spire.Doc
Затем импортируйте библиотеку:
from spire.doc import *
Следующие примеры работают напрямую с документами Word без необходимости установки Microsoft Word.
Разделение документа Word по диапазону страниц
Разбиение по страницам полезно, когда вы уже знаете, какие страницы должны принадлежать каждому выходному файлу.
Например, предположим, что документ содержит титульную страницу, введение и основной контент. Вы можете захотеть извлечь страницы 1–3 в один документ и сохранить всё после страницы 3 как другой файл.
Spire.Doc предоставляет метод ExtractPages() для этой цели.
Пример: извлечение страниц 1–3 и оставшихся страниц
from spire.doc import *
# Загрузка документа Word
doc = Document()
doc.LoadFromFile("input.docx")
# Извлечение страниц 1-3
first_part = doc.ExtractPages(0, min(3, doc.PageCount))
first_part.SaveToFile("Page1-3.docx", FileFormat.Docx)
first_part.Dispose()
# Извлечение оставшихся страниц, если в документе более 3 страниц
if doc.PageCount > 3:
second_part = doc.ExtractPages(3, doc.PageCount - 3)
second_part.SaveToFile("Page4-End.docx", FileFormat.Docx)
second_part.Dispose()
doc.Dispose()
Код создаёт до двух выходных файлов:
Page1-3.docx
Page4-End.docx
Как работает извлечение страниц
Ключевой метод:
doc.ExtractPages(startIndex, pageCount)
Первый аргумент указывает начальный индекс страницы, а второй определяет, сколько страниц должно быть извлечено.
Индексы страниц являются нулевыми , поэтому:
doc.ExtractPages(0, 3)
извлекает страницы 1, 2 и 3.
Аналогично:
doc.ExtractPages(3, doc.PageCount - 3)
начинается с четвёртой страницы и извлекает всё до конца документа.
В первой операции в этом примере используется:
min(3, doc.PageCount)
вместо простого указания 3. Это предотвращает запрос трёх страниц, когда исходный документ содержит менее трёх страниц.
Второе извлечение также обёрнуто в:
if doc.PageCount > 3:
чтобы не создавать ненужный пустой документ, когда исходный файл содержит только три страницы или меньше.
Извлечение другого диапазона страниц
Тот же метод можно адаптировать для любого диапазона страниц.
Например, чтобы извлечь страницы с 5 по 10:
part = doc.ExtractPages(4, 6)
part.SaveToFile("Page5-10.docx", FileFormat.Docx)
part.Dispose()
Начальный индекс — 4, потому что индексы страниц начинаются с нуля, а количество извлекаемых страниц — 6.
Это делает ExtractPages() особенно полезным, когда диапазоны страниц поступают из пользовательского ввода, файлов конфигурации или другого рабочего процесса обработки документов.
Разделение документа Word по разделам
Номера страниц не всегда являются наиболее осмысленным способом разделения документа Word.
Многие структурированные документы используют разделы для разделения содержимого. Раздел может представлять главу, сегмент отчёта, форму или другую логическую часть документа. Разделы также могут иметь собственные ориентацию страницы, поля, верхние и нижние колонтитулы или другие параметры страницы.
Если исходный документ уже использует разрывы разделов, разделение по разделам часто является более естественным подходом.
Пример: сохранение каждого раздела как отдельного документа Word
from spire.doc import *
# Загрузка документа Word
doc = Document()
doc.LoadFromFile("input.docx")
# Разделение документа по разделам
for i in range(doc.Sections.Count):
new_doc = Document()
# Клонирование текущего раздела и добавление его в новый документ
new_doc.Sections.Add(doc.Sections.get_Item(i).Clone())
# Сохранение раздела как отдельного документа Word
new_doc.SaveToFile(
f"output/SplitDocument/SplitBySectionBreak_{i+1}.docx"
)
new_doc.Close()
doc.Close()
Если исходный документ Word содержит три раздела, скрипт создаёт файлы, такие как:
SplitBySectionBreak_1.docx
SplitBySectionBreak_2.docx
SplitBySectionBreak_3.docx
Как работает разделение по разделам
Количество разделов в документе доступно через:
doc.Sections.Count
Скрипт проходит по каждому разделу:
for i in range(doc.Sections.Count):
На каждой итерации создаётся новый объект Document.
Затем текущий раздел извлекается и клонируется:
doc.Sections.get_Item(i).Clone()
Клонированный раздел добавляется в новый документ:
new_doc.Sections.Add(...)
Наконец, новый документ сохраняется как независимый файл .docx.
Клонирование здесь важно, потому что выходной документ получает собственную копию раздела, а не просто ссылку на раздел, хранящийся в исходном документе.
Разделение по страницам и по разделам: сравнение
Хотя оба метода создают файлы Word меньшего размера, они решают несколько разные задачи.
Используйте разделение по страницам , когда требование звучит так:
Сохранить страницы 1–3 отдельно, а оставшиеся страницы поместить в другой файл.
Используйте разделение по разделам , когда сам документ уже содержит структурные границы:
Создать отдельный файл Word для каждого раздела в документе.
Это различие важно, потому что страницы и разделы не эквивалентны. Один раздел может занимать несколько страниц, а документ также может содержать несколько разделов с различными настройками форматирования.
Когда разделение по страницам является лучшим выбором
Разделение по страницам особенно полезно для рабочих процессов, где границы выходных файлов определяются внешне, а не структурой файла Word.
Типичные примеры включают:
Извлечение титульной страницы и резюме
Отделение выбранных страниц из отчёта
Создание меньших документов из длинного сгенерированного отчёта
Обработка только указанного диапазона страниц
Построение рабочих процессов предпросмотра или распространения документов
Поскольку диапазоны страниц могут вычисляться динамически, этот метод также хорошо работает в приложениях пакетной обработки.
Например, программа может считывать диапазоны, такие как:
1-5
6-10
11-20
и автоматически создавать один документ Word для каждого диапазона.
Когда разделение по разделам имеет больше смысла
Разделы полезны, когда документ уже организован в логические единицы.
Рассмотрим отчёт, содержащий:
Раздел 1 — Резюме
Раздел 2 — Финансовые результаты
Раздел 3 — Анализ рынка
Раздел 4 — Приложение
Вместо определения того, где начинается и заканчивается каждая часть по номеру страницы, скрипт может просто обработать существующую коллекцию разделов.
Это особенно полезно для документов, в которых разделы используют разные:
Верхние и нижние колонтитулы
Размеры страниц
Поля
Ориентации страниц
Колоночные макеты
Настройки нумерации страниц
В таких случаях границы разделов несут структурную информацию, которой одни только номера страниц не обладают.
Важное замечание о страницах Word
Существует одно важное различие между работой с документами Word и такими форматами, как PDF.
PDF имеет фиксированный макет страницы. Документ Word, однако, является потоковым документом . Его разбиение на страницы зависит от таких элементов, как шрифты, межстрочные интервалы, размер страницы, поля, таблицы и другие параметры макета.
В результате разделение по страницам уместно, когда вам нужно работать именно с отображаемыми страницами файла Word. Если ваша цель — сохранить логическую организацию документа, разделение по разделам может быть более предсказуемым.
Поэтому выбор стратегии разделения должен зависеть от структуры исходного документа, а не от простого использования одного и того же метода для каждого файла.
Заключение
Разделение документов Word с помощью Python может упростить рабочие процессы с большими отчётами, главами, контрактами и другими структурированными файлами.
С помощью Spire.Doc for Python есть два простых подхода:
Используйте ExtractPages(), когда нужно извлечь определённый диапазон страниц.
Проходите по doc.Sections, когда хотите создать отдельный документ для каждого раздела Word.
Разделение по страницам даёт точный контроль над отображаемыми диапазонами страниц, в то время как разделение по разделам использует логическую структуру, уже встроенную в документ Word.
Для отдельных файлов ручного копирования содержимого в Microsoft Word может быть достаточно. Но когда необходимо последовательно обрабатывать десятки или сотни документов, реализация операции разделения в Python делает рабочий процесс гораздо более простым для автоматизации и повторного использования.










