@Max8k

Как автоматизировать заполнение бланка docx, меняя лишь часть текста?

Есть А4 бланк заявления (в docx), который нужно с телефона отправлять по вацапу начальнику. Меняются только дата, фио и номер. Как правило, отправлять нужно побыстрее и по нескольку раз в день.
Ф.И.О. клиента почти всегда разные, дата всегда сегодняшняя, а номеров всего 10, изредка бывают другие.

Со смартфона заполнять через офисный редактор не слишком удобно, да и ненароком можно что-то сбить, не то стереть и тд. Можно ли как-то автоматизировать процесс?
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ответы на вопрос 2
@tifco
Вероятно, через макросы, через встроенный в Офис VBA (Visual Basic for Applications) это положено делать.
Ответ написан
Комментировать
@Robyn_rock
Что-то умею
import datetime
from docx import Document

def replace_shortcodes_in_run(run, replacements):
    for key, val in replacements.items():
        if key in run.text:
            run.text = run.text.replace(key, val)

def replace_shortcodes_in_paragraph(paragraph, replacements):
    for run in paragraph.runs:
        replace_shortcodes_in_run(run, replacements)

def replace_shortcodes_in_table(table, replacements):
    for row in table.rows:
        for cell in row.cells:
            for paragraph in cell.paragraphs:
                replace_shortcodes_in_paragraph(paragraph, replacements)

def replace_shortcodes(doc, replacements):
    for paragraph in doc.paragraphs:
        replace_shortcodes_in_paragraph(paragraph, replacements)
    
    for table in doc.tables:
        replace_shortcodes_in_table(table, replacements)

def main():
    # Открыть файл template.docx
    doc = Document('template.docx')

    # Запросить у пользователя name и number
    name = input("Введите имя: ")
    number = input("Введите номер: ")

    # Запросить дату или использовать текущую дату, если не указана
    date_input = input("Введите дату (оставьте пустым для текущей даты): ")
    if date_input:
        date = date_input
    else:
        date = datetime.datetime.now().strftime("%Y-%m-%d")

    # Замены
    replacements = {
        '{name}': name,
        '{date}': date,
        '{number}': number
    }

    # Заменить шорткоды в документе
    replace_shortcodes(doc, replacements)

    # Сохранить документ как template_{date}.docx
    new_filename = f'template_{date}.docx'
    doc.save(new_filename)
    print(f'Документ сохранен как {new_filename}')

if __name__ == "__main__":
    main()


Могу доработать, если надо, под тебя. Можно всё это обвесить всякими удобствами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
от 60 000 до 120 000 ₽
Wanted. Санкт-Петербург
До 120 000 ₽
Wanted. Санкт-Петербург
от 80 000 до 150 000 ₽