Python-word. Создание отчета docx по результатам расчетов в python.
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Python-word. Создание отчета docx по результатам расчетов в python.

Python-word. Создание отчета docx по результатам расчетов в python.

Ответ
Поиск в этой теме
Непрочитано 26.12.2023, 12:19 #1
Python-word. Создание отчета docx по результатам расчетов в python.
fomichev.147
 
инженер-гидротехник
 
Москва
Регистрация: 08.02.2015
Сообщений: 46

Есть задача автоматически сгенерировать отчет в формате docx по результатам расчетов в Python.
Идея подставлять результаты расчетов в специально подготовленный шаблон word.
Есть прекрасная библиотека для pyton docxtpl для подстановки значений из словаря python в шаблон word. Эта библиотека отлично работает с текстом, рисунками. Однако когда дело доходит к подставленною значений в формулы - эта библиотека не работает корректно.

Есть ли какой-нибудь рабочий и удобный способ генерировать отчеты в формате docx по результатам расчетов в python. желательно путем подстановки значений в подготовленный шаблон.
Просмотров: 2027
 
Непрочитано 26.12.2023, 13:17
1 | #2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Вариантов много, вот несколько на вскидку:
1. Документ docx вполне себе может быть сохранен в формате xml и отредактирован по желанию.
2. Документ docx - zip архив, внутри которого лежат различные xml файлы и файлы ресурсов, никто не запрещает редактировать эти файлы напрямую.
3. Рекомендую результаты расчета выводить в виде xml, а потом по средством XSLT шаблона, генерировать итоговые документы, это быстро, просто и шаблон генерации можно в любой момент отредактировать без пересборки программы.
4. Отказаться от docx и через LaTEX, генерировать красивые pdf документы
Boxa вне форума  
 
Непрочитано 26.12.2023, 13:50
#3
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
эта библиотека не работает корректно
найди ошибку и исправь

Цитата:
Документ docx - zip архив, внутри которого лежат различные xml файлы и файлы ресурсов, никто не запрещает редактировать эти файлы напрямую
А ты читал документацию к docx?
trir вне форума  
 
Автор темы   Непрочитано 26.12.2023, 14:16
#4
fomichev.147

инженер-гидротехник
 
Регистрация: 08.02.2015
Москва
Сообщений: 46


Boxa, Спасибо большое за ответ!
3. Есть ли у вас возможность поделиться быть может каким-нибудь реализованным примером, или чуть подробнее описать этот метод?
4. Нужен редактируемый формат docx, т.к. в конторе никто с LaTEX не работает, да и в целом подавляющее большинство работает именно в word
fomichev.147 вне форума  
 
Непрочитано 26.12.2023, 15:22
#5
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


возможно проблема в разных версиях формата - пересохраните файл в другой версии

Последний раз редактировалось trir, 26.12.2023 в 15:36.
trir вне форума  
 
Автор темы   Непрочитано 26.12.2023, 15:45
#6
fomichev.147

инженер-гидротехник
 
Регистрация: 08.02.2015
Москва
Сообщений: 46


trir, Дело не в версии формата. Эта библиотека просто не работает с формулами.
fomichev.147 вне форума  
 
Непрочитано 26.12.2023, 15:57
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


https://www.google.com/search?q=python+docx+equation ?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.12.2023, 15:58
#8
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


C# https://github.com/xceedsoftware/Doc...ationSample.cs
trir вне форума  
 
Непрочитано 26.12.2023, 19:07
1 | #9
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Цитата:
Сообщение от trir Посмотреть сообщение
А ты читал документацию к docx?
Давно пытался, но там как то слишком муторно, да еще нужны были внешние библиотеки. Работая "в рукопашную", методом проб и ошибок я свою задачу выполнил, файл шаблона теперь правиться так как мне нужно, отчет делается. Профит.

Цитата:
Сообщение от fomichev.147 Посмотреть сообщение
. Есть ли у вас возможность поделиться быть может каким-нибудь реализованным примером, или чуть подробнее описать этот метод?
Вот ссылка, посмотрите: https://adn-cis.org/forum/index.php?topic=448.15 Делиться, увы, ничем не могу, а про подробности... по ссылке есть пример как использовать шаблон, для трансформации xml нужно написать шаблон на специфическом языке, описание его можно просмотреть тут https://xsltdev.ru/xslt/ . Там кажется что это сложно, но на самом деле все просто и чем то похоже на лисп =)
Boxa вне форума  
 
Непрочитано 26.12.2023, 22:12
#10
Дмитррр

НЛО
 
Регистрация: 09.07.2007
Тутошние мы.
Сообщений: 6,397


Задача сложнее, чем кажется. Особенно по сравнению с простым сохранением текста в txt. Лет 10, а то и больше назад пытался сделать что-то выводящее результаты в Ворд. Не в питоне, а с си-шарпе. Застрял на форматировании (таблицы, отступы, выравнивания и прочее) и плюнул на это дело.

Последний раз редактировалось Дмитррр, 27.12.2023 в 00:13. Причина: пропущено слово.
Дмитррр вне форума  
 
Автор темы   Непрочитано 26.12.2023, 23:45
1 | #11
fomichev.147

инженер-гидротехник
 
Регистрация: 08.02.2015
Москва
Сообщений: 46


Спасибо всем кто откликнулся

Нашел для себя следующее решение:
Код:
[Выделить все]
from docx import Document
from docx.oxml import parse_xml
import mathml2omml
import latex2mathml.converter


def test3():
    a = 5
    b = 2
  
    latex = r'''\frac{{{}}}{{{}}}'''.format(a, b)   # Генерирует LaTeX-формулу, используя 'a' и 'b'
    mathml = latex2mathml.converter.convert(latex)  # Преобразует выражение LaTeX в MathML
    omml = mathml2omml.convert(mathml)              # Преобразует выражение MathML в Office Math Markup Language (OMML)
    omml_xml = f'''
    <p xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"> 
    <m:oMathPara>{omml}</m:oMathPara>
    </p>
    '''                                             # Форматирует OMML в виде XML-структуры с дополнительными тегами
    omml_el = parse_xml(omml_xml)[0]                # Разбирает OMML XML и сохраняет результат в 'omml_el' в виде элемента


    document = Document('template_cell.docx')       # Загружает шаблон документа Word с именем 'template_cell.docx' в переменную 'document'
    table = document.tables[0]                      # Обращается к первой таблице в документе и сохраняет в переменной 'table'
    c = table.rows[0].cells                         # Обращается к ячейкам первой строки таблицы и сохраняет их в переменной 'c'
    p = c[0].paragraphs[0]                          # Обращается к первому параграфу первой ячейки таблицы и сохраняет его в переменной 'p'

    p._element.append(omml_el[0])                   # Добавляет элемент OMML XML 'omml_el' к элементу параграфа '_element'

    # Сохраняет измененный документ под именем 'demo.docx'
    document.save('demo.docx')
Eсть шаблон 'template_cell.docx' в котором настроена и отформатирована нужным образом таблица из двух столбцов и одной строки. Первая ячейка для вставки формулы, во второй уже забит номер формулы в виде перекрёстной ссылки.
Так же есть строка с latex формулой и переменными. Планирую передавать в эту функцию строчку с latex формулой с уже подставленными значениями, но тут для примера пока так.
В коде функции выше в комментариях описано все что там происходит.
Далее полученный документ можно сохранить либо на диск(как в примере) либо на во временные файлы и уже при помощи библиотеки docxtpl и метода new_subdoc вставить в главный шаблон в нужное место.
Надеюсь кому то будет полезным. если будут комментарии и замечания будет здорово если вы их тут напишете.


Offtop: Я делаю сайт для выполнения различных расчетов и хочу реализовать функцию по сохранению отчета в формате docx
http://structal.ru/ пока еще может не все корректно работать. Но так же если будет обратная связь, буду благодарен.


----- добавлено через ~3 мин. -----
Дмитррр,
https://docxtpl.readthedocs.io/en/latest/
при помощи этой библиотеки можно в уже готовый отформатированный шаблон word вставлять переменные
fomichev.147 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Python-word. Создание отчета docx по результатам расчетов в python.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вставить чертеж из AutoCAD в Word? lyubitel4 AutoCAD 37 06.10.2014 19:28
Вставка AutoCAD чертежа в Word Youdgin AutoCAD 36 02.09.2011 17:14
Отображение формул в Microsoft Office Word 2003 (2007) eilukha Прочее. Программное обеспечение 15 03.03.2011 18:51
Word 2007/2010 не открывает объект AutoCAD 2009 Andersenqwer Прочее. Программное обеспечение 3 20.12.2010 21:46
Как в новой версии Word загрузить в общий документ текст из других файлов WORD? МишаИнженер Прочее. Программное обеспечение 4 13.10.2010 05:47