- fix Не собиралось само список всех приложений
GhostEditor
Программа для конвертации из формата md в формат docx(x это без макросов, m с макросами) (Office Open XML),odt(OpenDocument)
1. python-docx
Назначение: Создание и модификация Word-документов.
Ключевые возможности:
- Добавление/редактирование текста, таблиц, изображений.
- Управление стилями, колонтитулами, сносками.
- Работа с XML через абстракции (Paragraph, Run, Table).
Пример:
from docx import Document
from docx.shared import Pt
doc = Document()
paragraph = doc.add_paragraph("Hello ")
run = paragraph.add_run("OOXML!")
run.bold = True
run.font.size = Pt(14)
# Таблица
table = doc.add_table(rows=2, cols=2)
table.cell(0, 0).text = "Cell A1"
doc.save("report.docx")
Плюсы:
- Интуитивный API, близкий к логике Word.
- Поддержка всех ключевых частей пакета (headers, footers, styles).
Минусы:
- Нет поддержки макросов.
- Ограниченная работа с графикой (изображения добавляются, но редактирование сложно).
Ссылка: python-docx.readthedocs.io
2. docxtpl
Назначение: Генерация документов по шаблонам (Jinja2).
Особенности:
- Шаблоны .docx с переменными (
{{ variable }}) и логикой ({% if %}). - Поддержка таблиц, изображений, HTML-фрагментов.
Пример:
from docxtpl import DocxTemplate
doc = DocxTemplate("template.docx")
context = {
"title": "Отчет за 2023",
"items": [{"name": "Item 1"}, {"name": "Item 2"}]
}
doc.render(context)
doc.save("output.docx")
Плюсы:
- Идеален для шаблонизированных отчетов (договоры, счета).
- Интеграция с Django/Flask.
Минусы:
- Требует предварительной настройки шаблонов в Word.
Ссылка: github.com/elapouya/python-docx-template
3. mammoth
Назначение: Конвертация .docx → HTML с сохранением структуры.
Особенности:
- Преобразует стили Word в CSS-классы.
- Подходит для извлечения контента из сложных документов.
Пример:
import mammoth
with open("document.docx", "rb") as docx_file:
result = mammoth.convert_to_html(docx_file)
html = result.value # HTML-строка
warnings = result.messages # Предупреждения
Плюсы:
- Сохраняет семантику (заголовки, списки, таблицы).
- Легко интегрируется с парсерами (BeautifulSoup).
Минусы:
- Не подходит для обратной конвертации (HTML → docx).
Ссылка: github.com/mwilliamson/mammoth.py
Низкоуровневые инструменты (для кастомных задач)
1. zipfile + lxml
Назначение: Прямой доступ к XML-структуре OOXML.
Когда использовать:
- При работе с нестандартными частями пакета (напр., кастомные XML-маппинги в Excel).
- Для восстановления поврежденных файлов.
Пример для Excel:
import zipfile
from lxml import etree
# Распаковываем workbook.xml
with zipfile.ZipFile("report.xlsx") as xlsx:
xml_data = xlsx.read("xl/workbook.xml")
# Парсим XML
workbook = etree.fromstring(xml_data)
namespaces = {"ns": "http://schemas.../spreadsheetml/2006/main"}
sheets = workbook.findall(".//ns:sheet", namespaces)
# Меняем имя листа
sheets[0].set("{http://.../officeDocument/2006/relationships}name", "New Sheet")
# Сохраняем изменения
with zipfile.ZipFile("fixed.xlsx", "w") as new_xlsx:
for file in xlsx.namelist():
if file != "xl/workbook.xml":
new_xlsx.writestr(file, xlsx.read(file))
new_xlsx.writestr("xl/workbook.xml", etree.tostring(workbook))
Плюсы:
- Полный контроль над структурой.
- Работает с любыми частями пакета.
Минусы:
- Требует знания XML-схем OOXML.
- Риск повреждения файла при ошибках.
2. officedoc
Назначение: Универсальный доступ к форматам Office (docx, xlsx, pptx).
Особенности:
- Объединяет функционал
python-docx,openpyxl,python-pptxв едином API. - Упрощает обработку мультимедийных вложений.
Пример:
from officedoc import Document
doc = Document("mixed.docx")
for image in doc.images:
image.save("extracted_" + image.filename)
for table in doc.tables:
print(table.to_dataframe()) # Конвертация в pandas DataFrame
Ссылка: github.com/mikem1701/officedoc
Сравнение библиотек
| Библиотека | Скорость | Сложность | Особенности |
|---|---|---|---|
| python-docx | Средняя | Средняя | Стандарт для работы с Word |
| docxtpl | Средняя | Низкая | Шаблонизация через Jinja2 |
| zipfile + lxml | Высокая | Высокая | Полный контроль над XML |
Для Word (.docx)
- Простое создание документов:
python-docx. - Шаблонные документы (договоры, счета):
docxtpl. - Извлечение контента:
mammoth→ обработка HTML через BeautifulSoup. - Редактирование структуры:
python-docx+zipfileдля кастомных частей.
Для кастомных задач
- Восстановление файлов:
zipfile+lxml(ручное исправление XML). - Интеграция с внешними системами:
openpyxl/python-docx+ REST API (напр., выгрузка данных из БД в Excel).
Типичные проблемы и решения
- Стили не применяются в Word
- Проблема:
python-docxиспользует стили изstyles.xml, но не создает новые автоматически. - Решение:
from docx.shared import Pt style = doc.styles.add_style("Heading3", WD_STYLE_TYPE.PARAGRAPH) font = style.font font.name = "Arial" font.size = Pt(12)
- Проблема:
Заключение
Для 90% задач достаточно:
- Excel:
openpyxlилиpandas. - Word:
python-docx+docxtpl.
Используйте низкоуровневые методы (zipfile/lxml) только когда:
Для углубленного изучения:
- Open XML SDK 2.5 (официальная документация Microsoft).
- ECMA-376 стандарт (полная спецификация).