Добавление, удаление и очистка абзацев в документах Word с помощью Python
Работа с документами Word программно является распространённой задачей в сценариях автоматизации документов, таких как генерация отчетов, обработка шаблонов и очистка контента. Одной из самых частых задач является добавление, удаление или очистка абзацев.
В этой статье вы узнаете, как добавлять и удалять абзацы в документе Word с помощью Python, с практическими примерами, основанными на Spire.Doc для Python.
Содержание
Что такое Spire.Doc для Python
Установка необходимой библиотеки
Добавление абзаца
Удаление абзаца
Удаление пустых/незаполненных абзацев
Заключительные мысли
Что такое Spire.Doc для Python
Spire.Doc для Python — это библиотека для обработки документов Word, которая позволяет разработчикам создавать, редактировать и манипулировать файлами DOC и DOCX программно — без необходимости в Microsoft Word.
Она предлагает обширные API для работы с абзацами, стилями, таблицами и общей структурой документа, что делает её практичным выбором для задач автоматизации и обработки документов Word в Python.
Установка необходимой библиотеки
Перед началом работы установите Spire.Doc для Python с помощью pip:
pip install spire-doc
Spire.Doc для Python предоставляет бесплатную версию, которая поддерживает базовые операции с документами Word, что вполне достаточно для большинства задач на уровне абзацев, рассматриваемых в этой статье.
pip install spire-doc-free
Добавление абзаца
1. Добавление текста в конец документа Word
Добавление абзаца в конец документа — одна из самых распространённых операций при динамической генерации файлов Word.
from spire.doc import *
from spire.doc.common import *
# Загрузка документа Word
doc = Document()
doc.LoadFromFile("Input.docx")
# Получение последнего раздела
lastSection = doc.LastSection
# Добавление абзаца в раздел
paragraph = lastSection.AddParagraph()
# Добавление текста в абзац
paragraph.AppendText("Это новый абзац.")
# Сохранение документа
doc.SaveToFile("AddParagraphAtEnd.docx", FileFormat.Docx2019)
doc.Dispose()
Этот подход идеально подходит для добавления заключений, резюме или добавленных материалов.
2. Вставка абзаца в определённое место
Иногда вам может потребоваться вставить абзац в точном месте, а не добавлять его в конец.
from spire.doc import *
from spire.doc.common import *
# Загрузка документа Word
doc = Document()
doc.LoadFromFile("Input.docx")
# Получение специфического раздела
section = doc.Sections[0]
# Создание абзаца
paragraph = Paragraph(doc)
paragraph.AppendText("Это новый абзац.")
# Вставка абзаца как третьего (индекс начинается с 0)
section.Paragraphs.Insert(2, paragraph)
# Сохранение документа
doc.SaveToFile("InsertParagraph.docx", FileFormat.Docx2019)
doc.Dispose()
Это особенно полезно при работе с шаблонами, где контент должен появляться в фиксированном порядке.
3. Настройка форматирования абзаца
Вы также можете применять пользовательское форматирование к вновь добавленным абзацам с помощью стилей.
# Создание стиля абзаца
style = ParagraphStyle(doc)
style.Name = "NewStyle"
style.CharacterFormat.FontName = "Times New Roman"
style.CharacterFormat.FontSize = 12
doc.Styles.Add(style)
# Применение стиля к абзацу
paragraph.ApplyStyle(style.Name)
Использование стилей вместо ручного форматирования помогает поддерживать последовательность во всём документе.
Удаление абзаца
1. Удаление абзаца по индексу
Если вы знаете положение абзаца, который хотите удалить, удаление по индексу — это просто.
from spire.doc import *
from spire.doc.common import *
# Загрузка документа Word
doc = Document()
doc.LoadFromFile("Input.docx")
# Получение специфического раздела
section = doc.Sections[0]
# Удаление четвёртого абзаца
section.Paragraphs.RemoveAt(3)
# Сохранение документа
doc.SaveToFile("RemoveParagraph.docx", FileFormat.Docx2019)
doc.Dispose()
💡 Вы также можете удалить все абзацы, используя section.Paragraphs.Clear(), если это необходимо.
2. Удаление абзаца, содержащего определённый текст
Во многих реальных случаях вы не знаете индекс абзаца заранее. Вместо этого вы хотите удалить абзацы, содержащие определённый текст.
from spire.doc import *
from spire.doc.common import *
# Загрузка документа Word
doc = Document()
doc.LoadFromFile("Input.docx")
# Получение специфического раздела
section = doc.Sections[0]
# Поиск всех вхождений указанного текста
textSelections = doc.FindAllString("Целевой текст", False, True)
# Цикл по всем вхождениям
for selection in textSelections:
textRange = selection.GetAsOneRange()
owner_paragraph = textRange.OwnerParagraph
section.Paragraphs.Remove(owner_paragraph)
# Сохранение документа
doc.SaveToFile("RemoveCertainParagraph.docx", FileFormat.Docx2019)
doc.Dispose()
Этот метод очень эффективен для очистки заполнительного контента в шаблонах.
Удаление пустых/незаполненных абзацев
1. Удаление абзацев без текста
Пустые абзацы — это распространённый побочный эффект генерации или конвертации документов. Следующий пример удаляет действительно пустые абзацы, сохраняя не текстовый контент, такой как изображения или поля.
from spire.doc import *
from spire.doc.common import *
# Загрузка документа Word
doc = Document()
doc.LoadFromFile("Input.docx")
# Получение специфического раздела
section = doc.Sections[0]
# Перебор с конца вперед
for i in range(section.Paragraphs.Count - 1, -1, -1):
paragraph = section.Paragraphs[i]
has_non_text_content = False
for j in range(paragraph.ChildObjects.Count):
obj = paragraph.ChildObjects[j]
if obj.DocumentObjectType != DocumentObjectType.TextRange:
has_non_text_content = True
break
if not has_non_text_content and (paragraph.Text == "" or paragraph.Text.isspace()):
section.Paragraphs.RemoveAt(i)
# Сохранение документа
doc.SaveToFile("RemoveBlankParagraphs.docx", FileFormat.Docx2019)
doc.Dispose()
2. Очистка лишних разрывов строки
Лишние разрывы строки могут выглядеть неаккуратно в документе. Вы можете удалить их, просканировав дочерние объекты абзаца.
from spire.doc import *
from spire.doc.common import *
# Загрузка документа Word
document = Document()
document.LoadFromFile("Input.docx")
# Получение первого раздела
section = document.Sections[0]
# Перебор всех абзацев
for j in range(section.Paragraphs.Count):
paragraph = section.Paragraphs[j]
for i in range(paragraph.ChildObjects.Count - 1, -1, -1):
obj = paragraph.ChildObjects[i]
if obj.DocumentObjectType == DocumentObjectType.Break:
try:
if hasattr(obj, 'BreakType') and obj.BreakType == BreakType.LineBreak:
paragraph.ChildObjects.RemoveAt(i)
except:
paragraph.ChildObjects.RemoveAt(i)
# Сохранение документа
document.SaveToFile("RemoveLineBreaks.docx", FileFormat.Docx)
document.Dispose()
Заключительные мысли
Добавление и удаление абзацев программно — это основное умение при работе с документами Word в Python.
С помощью Spire.Doc для Python вы можете точно контролировать содержание, положение, форматирование и логику очистки абзацев.
Будь то генерация отчетов, обработка шаблонов или очистка конвертированных документов, эти техники помогут вам автоматически создавать чистые и профессиональные файлы Word.

























![Ошибка Home Assistant WARNING (MainThread) [supervisor.utils.pwned] Can’t fetch HIBP data: Timeout](https://cs19.pikabu.ru/s/2026/01/06/05/lenuxbyy.jpg)




