Работа с Word в Python: обзор библиотек и примеры кода

Раздел: Офис -> работа с документами

Основные библиотеки для работы с Word в Python

Как создать и отформатировать документ Word с помощью python-docx?

python-docx самая популярная библиотека для создания и редактирования файлов .docx. Она не требует установленного Microsoft Word. Основные возможности: добавление текста, таблиц, изображений, управление стилями.

Пример установки: pip install python-docx

Базовый код для создания документа:


from docx import Document

doc = Document()
doc.add_heading('Заголовок документа', level=1)
doc.add_paragraph('Это обычный параграф.')
doc.save('example.docx')
  

Python docx библиотека (библиотека python-docx для работы с документами)

Код создает новый файл example.docx с заголовком и параграфом.

Чтобы добавить таблицу:


table = doc.add_table(rows=2, cols=2)
cell = table.cell(0, 0)
cell.text = 'Ячейка 1'
  

Python документ word (работа с документами word в python (python-docx))

Для изображения:


doc.add_picture('image.png', width=Inches(1.5))
  

Python word библиотеки (библиотеки для работы с word в python)

Типичные ошибки:

  • ModuleNotFoundError: No module named 'docx' не установлена библиотека. Решение: выполнить pip install python-docx в виртуальном окружении.
  • Файл не открывается из за повреждения. Решение: проверить структуру документа с помощью docx.opc.utils.
  • Проблемы с кодировкой шрифтов. Решение: задавать шрифт через run.font.name = 'Arial'.

Как автоматизировать Microsoft Word через COM с библиотекой win32com?

win32com позволяет управлять установленным Word через COM интерфейс. Это дает полный контроль, включая макросы, но работает только на Windows и требует Word.


import win32com.client as win32

word = win32.Dispatch("Word.Application")
doc = word.Documents.Add()
doc.Content.Text = "Текст документа"
doc.SaveAs("test.docx")
word.Quit()
  

Код открывает Word, создает новый документ, добавляет текст и сохраняет.

Распространенные проблемы:

  • Ошибка com_error: (-2147221005, ...) не установлен Word или неправильная регистрация. Решение: проверить установку офиса, переустановить pywin32.
  • Word остается в фоне. Решение: после работы вызвать word.Quit().

Как извлечь текст из Word без форматирования с помощью docx2txt?

docx2txt простая библиотека для извлечения только текстового содержимого. Установка: pip install docx2txt


import docx2txt

text = docx2txt.process("file.docx")
print(text)
  

Результатом будет строка с текстом, все изображения и таблицы игнорируются.

Если файл поврежден, возникает ValueError: ... Решение: предварительно проверить файл или использовать try/except.

Как конвертировать docx в HTML с помощью Mammoth?

Mammoth предназначена для преобразования .docx в HTML, Markdown и другие форматы с минимальными потерями. Установка: pip install mammoth


import mammoth

with open("file.docx", "rb") as f:
    result = mammoth.convert_to_html(f)
    html = result.value
    print(html)
  

Библиотека учитывает стили, списки и изображения (преобразует в data URI).

Если result.messages содержит предупреждения, это может указывать на неподдерживаемые элементы. Решение: использовать convert_to_markdown или настроить пользовательские преобразования.

Как использовать Spire.Doc для расширенных операций?

Spire.Doc коммерческая библиотека (есть бесплатный тариф с ограничениями). Поддерживает создание сложных документов, защиту, слияние, конвертацию в PDF. Установка: pip install spire.doc


from spire.doc import *

doc = Document()
section = doc.AddSection()
paragraph = section.AddParagraph()
paragraph.AppendText("Текст")
doc.SaveToFile("spire_output.docx")
  

Spire.Doc предоставляет больше методов для форматирования, но требует лицензию для коммерческого использования.

Бесплатная версия добавляет водяной знак. Решение: приобрести лицензию или использовать альтернативы.

Дополнительные примеры и сценарии использования

python-docx: создание документа с таблицей, изображением и стилями

Пример

from docx import Document
from docx.shared import Inches, Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH

doc = Document()

# Заголовок
head = doc.add_heading('Отчет о продажах', level=1)

# Параграф с форматированием
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
run = p.add_run('Квартальные показатели за 2024 год.')
run.bold = False
run.font.size = Pt(12)

# Таблица
table = doc.add_table(rows=3, cols=3, style='Table Grid')
headers = ['Продукт', 'Количество', 'Сумма']
for i, h in enumerate(headers):
    table.cell(0, i).text = h

data = [('Ноутбуки', 150, 750000), ('Мониторы', 80, 240000)]
for row_idx, (prod, qty, s) in enumerate(data, start=1):
    table.cell(row_idx, 0).text = prod
    table.cell(row_idx, 1).text = str(qty)
    table.cell(row_idx, 2).text = str(s)

# Изображение
doc.add_picture('logo.png', width=Inches(2))

doc.save('report.docx')

Результат: файл report.docx с заголовком, отформатированным абзацем, таблицей и картинкой.

(Файл создан, открытие в Word покажет структуру)

win32com: открытие существующего документа и замена текста

Пример

import win32com.client as win32

word = win32.Dispatch("Word.Application")
word.Visible = False
doc = word.Documents.Open(r"C:\path\template.docx")

# Поиск и замена
find = doc.Content.Find
find.ClearFormatting()
find.Text = "{{NAME}}"
find.Replacement.ClearFormatting()
find.Replacement.Text = "Иван Петров"
find.Execute(Replace=2)  # 2 = wdReplaceAll

doc.SaveAs(r"C:\path\result.docx")
word.Quit()

Код заменяет все вхождения {{NAME}} на имя и сохраняет новый документ.

Mammoth: конвертация с пользовательскими стилями

Пример

import mammoth

style_map = """
p[style-name='Note'] => div.note:fresh
"""

with open("note.docx", "rb") as f:
    result = mammoth.convert_to_html(f, style_map=style_map)
    with open("output.html", "w", encoding="utf-8") as out:
        out.write(result.value)

В результате стиль 'Note' преобразуется в CSS класс note.

docx2txt: извлечение текста из нескольких файлов

Пример

import os
import docx2txt

directory = "docs"
for filename in os.listdir(directory):
    if filename.endswith(".docx"):
        path = os.path.join(directory, filename)
        text = docx2txt.process(path)
        print(f"--- {filename} ---")
        print(text[:200])  # первые 200 символов

Выводятся фрагменты текста из каждого файла в папке.

библиотеки для работы с Word в Python - comments

En
Python word библиотеки (python)