hleb 638fd38d7f
Python application / build (push) Has been cancelled
fix-size src
- Удалена папка предназначенная для сборки не влияющая на сборку и разработку
2026-09-05 12:46:26 +00:00
2026-09-03 10:44:08 +03:00
2026-09-03 10:44:08 +03:00
2026-09-03 10:44:08 +03:00
2026-09-03 10:44:08 +03:00
2026-09-03 10:44:08 +03:00
2026-09-05 10:24:13 +03:00
2026-09-03 10:44:08 +03:00
2026-09-03 10:44:08 +03:00
2026-09-05 09:47:57 +03:00
2026-09-04 22:28:39 +03:00
2026-09-05 10:24:13 +03:00
2026-09-03 10:44:08 +03:00
2026-09-04 22:28:39 +03:00
2026-09-04 22:28:39 +03:00
2026-09-05 10:24:13 +03:00
2025-09-15 07:48:37 +03:00
2026-09-04 22:28:39 +03:00
2026-09-04 22:28:39 +03:00
2026-09-03 10:44:08 +03:00
2025-09-15 07:48:37 +03:00
2025-09-15 07:48:37 +03:00
2026-09-04 22:28:39 +03:00
2026-09-04 22:28:39 +03:00
2025-09-15 07:48:37 +03:00
2025-09-15 07:48:37 +03:00
2025-09-15 07:48:37 +03:00
2025-09-15 07:48:37 +03:00
2025-09-15 07:48:37 +03:00
2026-09-03 10:44:08 +03:00
2026-09-04 22:28:39 +03:00
2026-09-04 22:28:39 +03:00
2025-09-15 07:48:37 +03:00
2026-09-03 10:44:08 +03:00
2026-09-04 22:28:39 +03:00
2026-09-04 22:28:39 +03:00
2026-09-04 22:28:39 +03:00
2026-09-04 22:28:39 +03:00
2026-09-04 22:28:39 +03:00
2026-09-03 10:44:08 +03:00
2026-09-03 10:44:08 +03:00

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).

Типичные проблемы и решения

  1. Стили не применяются в 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) только когда:

Для углубленного изучения:

S
Description
No description provided
Readme 182 MiB
Languages
Python 98.2%
Batchfile 0.9%
TeX 0.3%
VBA 0.3%
HTML 0.2%