Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 17, 2019 19:35:23

sof07
Зарегистрирован: 2019-04-17
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с документами word

Здравствуйте! Есть образец заявления на отпуск, к нему прилагаются не очень опытные сотрудники которые не могут заполнить заявление без ошибок ( забыли поменять дату, фамилию и т.п.) , так же есть проблемы с форматированием документа. Нужна какая то форма в которая просит ввести нужные данные , и которую заполняет сотрудник, нажимает создать, создаётся правильно оформленное заявление, с правильно подобранным форматированием в зависимости от длинны текста. Есть ли где то уроки по созданию подобных форм?

Офлайн

#2 Апрель 17, 2019 22:48:20

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Работа с документами word

sof07
Есть образец заявления на отпуск, к нему прилагаются не очень опытные сотрудники
Я бы сказал по другому. Есть сотрудники занятые полезным делом и которые в гробу видали вашу бесполезную бумажку “заявление на отпуск”, которую при правильно поставленном делопроизводстве вы можете получить имея только дату начала отпуска, проставленную пользователем.

Ну и причем тут ворд? Этот инструмент для поставленной вами задачи плохо подходит.

Задача разбивается на 2 этапа.
1 Проверка корректности ввода данных. Обычно стараются сблизить момент редактирования и проверки. Те делают GUI приложение с полями. проверку делают по окончании редактирования отдельных полей. Но возможны и альтернативные подходы. Например заполнение текстового файла и проверка по окончании его редактирования с указанием причины некорректности.

2 Формирование печатного документа. Мы для этой цели используем mako + latex, который и формирует pdf документ на основе описания способов выравнивания и прочих условий. Не исключаю возможность других подходов (https://pbpython.com/pdf-reports.html, https://python-docx.readthedocs.io/en/latest/ https://tex.stackexchange.com/questions/14842/creating-fillable-pdfs, https://help.libreoffice.org/Common/Working_with_Forms/ru ), но лично мне вариант с latex представляется наилучшим.






Офлайн

#3 Апрель 18, 2019 00:09:55

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Работа с документами word

Есть ещё LibreOffice Writer, в котором макросы можно делать не только на диалекте Basic'а, но и на Python, и на JavaScript.

Да и Microsoft Word обладает возможностью создавать не просто макросы, а макросы с формами ввода. Но проблема таких макросов в том, что их потом негде больше использовать и подключить к ним существующие программы тоже нереально. То есть Visual Basic в Word'е просто изолирован от мира других программ.

Согласен с doza_and по поводу создания pdf-файла - это самый главный формат сейчас для документов. Он не привязан к каким-то определённым системам типа Windows и программам типа Microsoft Word. Да и в вебе сейчас для просмотра pdf можно использовать облачные сервисы. На Яндекс-диск, облако Mail.ru или Google Drive кладёшь его и его можно читать прямо в браузере, скачивать.

Тут просто встаёт вопрос: зачем тебе вообще бумажки в организации, если всё можно хранить в виде pdf-файлов, подписанных электронной подписью?

Возвращаясь к реалиям, тут нужно генерировать документ по шаблону на основе введённых данных. Ну для начала нужно просто ввести данные как-то и сохранить их. Дальше эти данные уже используются для формирования документа. Представим, что таких человек 1000, они ввели свои данные и данные лежат в csv-файле. Что дальше? Не будешь же руками обрабатывать каждого? Нужно этот файл передать в программу, которая возьмёт каждую запись из файла и превратит её в документ, готовый для печати. Можно их использовать и для формирования .doc, и для формирования .pdf, и для формирования .xls. Можно их использовать разнопланово.



Отредактировано py.user.next (Апрель 18, 2019 00:22:06)

Офлайн

#4 Апрель 18, 2019 10:43:33

sof07
Зарегистрирован: 2019-04-17
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с документами word

doza_and
Да я сам видал в гробу эту бесполезную бумажку, хочу облегчить труд себе и своим коллегам которым мозг имеет руководство. За наводку спасибо!

Офлайн

#5 Апрель 18, 2019 10:49:32

sof07
Зарегистрирован: 2019-04-17
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с документами word

py.user.next
Есть ещё LibreOffice Writer, в котором макросы можно делать не только на диалекте Basic'а, но и на Python, и на JavaScript.Да и Microsoft Word обладает возможностью создавать не просто макросы, а макросы с формами ввода. Но проблема таких макросов в том, что их потом негде больше использовать и подключить к ним существующие программы тоже нереально. То есть Visual Basic в Word'е просто изолирован от мира других программ.Согласен с doza_and по поводу создания pdf-файла - это самый главный формат сейчас для документов. Он не привязан к каким-то определённым системам типа Windows и программам типа Microsoft Word. Да и в вебе сейчас для просмотра pdf можно использовать облачные сервисы. На Яндекс-диск, облако Mail.ru или Google Drive кладёшь его и его можно читать прямо в браузере, скачивать.Тут просто встаёт вопрос: зачем тебе вообще бумажки в организации, если всё можно хранить в виде pdf-файлов, подписанных электронной подписью? Возвращаясь к реалиям, тут нужно генерировать документ по шаблону на основе введённых данных. Ну для начала нужно просто ввести данные как-то и сохранить их. Дальше эти данные уже используются для формирования документа. Представим, что таких человек 1000, они ввели свои данные и данные лежат в csv-файле. Что дальше? Не будешь же руками обрабатывать каждого? Нужно этот файл передать в программу, которая возьмёт каждую запись из файла и превратит её в документ, готовый для печати. Можно их использовать и для формирования .doc, и для формирования .pdf, и для формирования .xls. Можно их использовать разнопланово.
У нас все чуть по другому, по этому и требования такие, доступ к интернету отсутствует, заявления подаются в письменном виде с кучами подписей вышестоящих должностных лиц. Заявления печатаются собственноручно по образцу , образец некоторые умудряются испоганить, в некоторых случаях меняется должностное лицо, допустим в шапке начальник, или временно исполняющий обязанности начальника, соответственно из за этого догумент сползает вниз, его нужно дополнительно форматировать и подгонять

Офлайн

#6 Апрель 18, 2019 14:58:53

sof07
Зарегистрирован: 2019-04-17
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с документами word

py.user.next
Есть ещё LibreOffice Writer, в котором макросы можно делать не только на диалекте Basic'а, но и на Python, и на JavaScript.Да и Microsoft Word обладает возможностью создавать не просто макросы, а макросы с формами ввода. Но проблема таких макросов в том, что их потом негде больше использовать и подключить к ним существующие программы тоже нереально. То есть Visual Basic в Word'е просто изолирован от мира других программ.Согласен с doza_and по поводу создания pdf-файла - это самый главный формат сейчас для документов. Он не привязан к каким-то определённым системам типа Windows и программам типа Microsoft Word. Да и в вебе сейчас для просмотра pdf можно использовать облачные сервисы. На Яндекс-диск, облако Mail.ru или Google Drive кладёшь его и его можно читать прямо в браузере, скачивать.Тут просто встаёт вопрос: зачем тебе вообще бумажки в организации, если всё можно хранить в виде pdf-файлов, подписанных электронной подписью? Возвращаясь к реалиям, тут нужно генерировать документ по шаблону на основе введённых данных. Ну для начала нужно просто ввести данные как-то и сохранить их. Дальше эти данные уже используются для формирования документа. Представим, что таких человек 1000, они ввели свои данные и данные лежат в csv-файле. Что дальше? Не будешь же руками обрабатывать каждого? Нужно этот файл передать в программу, которая возьмёт каждую запись из файла и превратит её в документ, готовый для печати. Можно их использовать и для формирования .doc, и для формирования .pdf, и для формирования .xls. Можно их использовать разнопланово.
У нас все чуть по другому, по этому и требования такие, доступ к интернету отсутствует, заявления подаются в письменном виде с кучами подписей вышестоящих должностных лиц. Заявления печатаются собственноручно по образцу , образец некоторые умудряются испоганить, в некоторых случаях меняется должностное лицо, допустим в шапке начальник, или временно исполняющий обязанности начальника, соответственно из за этого догумент сползает вниз, его нужно дополнительно форматировать и подгонять
doza_and
doza_and
А можно в качестве образца файл пдф, что бы посмотреть как все это работает?

Офлайн

#7 Апрель 19, 2019 23:20:30

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Работа с документами word

Не как продукт, а как иллюстрация

 import yaml
import datetime
import subprocess as sp
import sys
name = "Карпов"
beg = datetime.datetime.now().date()
olen = 4
if not type(olen) is int:
    print("olen must be int")
    sys.exit(-1)
if not olen<=0:
    print("olen must be positive")
    sys.exit(-1)
db_str = """
name: отдел снабжения
leader :
 fio : Ленин Владимир Ильич
 position : начальник департамента
pers:
 - fioI : Иванов Иван Иванович
   fio : Иванова Ивана Ивановича
   position : ведущий инженер
 - fioI : Петров Петр Петрович
   fio : Петрова Петра Петровича
   position : инженер
---
name: отдел потребления
leader :
 fio : Медведев В. В.
 position : начальник департамента
pers:
 - fioI : Карасев Аркадий Аркадьевич
   fio : Карасева Аркадия Аркадьевича
   position : ведущий инженер
 - fioI : Карпов Борис Борисович
   fio : Карпова Бориса Борисовича
   position : инженер
"""
db = list(yaml.load_all(db_str))
found = False
for dep in db:
    for pers in dep["pers"]:
        if pers["fioI"].startswith(name):
            found = True
            break
if not found:
    print("name not found")
    sys.exit(-1)
now = str(datetime.datetime.now().date())
t0 = str(beg)
t1 = str(beg + datetime.timedelta(days=olen))
npos = dep["leader"]["position"]
nachalnik = dep["leader"]["fio"]
fio = pers["fio"]
fioI = pers["fioI"]
pos = pers["position"]
text = fr"""
\documentclass[12pt,a4paper]{{article}}
\usepackage{{cmap}}
\usepackage[T2C]{{fontenc}}
\usepackage[utf8]{{inputenc}}
\usepackage[english,russian]{{babel}}
\usepackage{{a4wide}}
\begin{{document}}
\hfill
\begin{{minipage}}[t]{{0.4\textwidth}}
{npos} ООО <<Рассвет>>
{nachalnik}
от {pos} {fio}
\end{{minipage}}
\vspace{{2.5cm}}
\begin{{center}}
\Large Заявление
\end{{center}}
Прошу предоставить мне ежегодный оплачиваемый отпуск продолжительностью
{olen} календарных дней в период с {t0} по {t1} г.
\vspace{{1cm}}
\hfill \hbox to 0.3\textwidth {{\hrulefill {fioI} }}
\hfill {now}
\end{{document}}"""
with open("a.tex","w",encoding="utf-8") as f:
    f.write(text)
sp.run("pdflatex a.tex")

основные моменты:

  • Всю доступную информацию забивать в базу (тут пример с yaml)
  • По идее надо сделать gui Для корректного ввода данных (фамилии длина отпуска дата и т.п. ) И сразу показывать пользователю в чем ошибка. Тут просто ввод данных в начале скрипта и пара проверок
  • Далее шаблон в который подставляются данные. Шаблон на языке latex, который показывает как надо форматировать текст
  • Под конец просто рендеринг текста.



Прикреплённый файлы:
attachment a.pdf (21,7 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version