Работа с 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 символов
Выводятся фрагменты текста из каждого файла в папке.