Pull to refresh

Comments 2

неоднократно делал на VBA автоматизацию заполнения шаблонных документов в Word из эксельки. Основная беда в том, что если ячейка в эксельке - четкий адрес объекта, то поиск, куда вставить - отдельная песня. Хорошо, когда шаблон простой и документ фактически свободного форматирования. Расставил закладки и вперед по закладкам вставляешь. А когда это форма Росстата, и шаг вправо-влево бухгалтерия убьет?
Туда-сюда пробел, и форматирование плывет. Очень прикольно было, когда пошли азербайджанские фамилии в путевой лист, типа Ахмат-Кулиджаноглы Мухаммед Байратджанович, а символов там в поле очень мало, и форматирование плыло. Начинаешь уменьшать шрифт - он становится неразборчивым. Но можно ставить инициалы.

Неудобство слияния документов word и excel заключается еще в том, что если надо добавить в word таблицу имеющую динамический размер, то возникнут трудности. В docxtpl это все решается очень просто, т.к. он построен на шаблонизаторе Jinja2. {%p tag %} - абзацы, {%tr tag %} - строки таблицы, {%tc tag %} - колонки таблицы, {%r tag %} - прогоны (объект run в word), а также циклы, условия, xml и т.д. Тоже использую его для заполнения документов docxtpl, только вместо openpyxl использую pandas. Словари для заполнения формирую так: dict(zip(df.col1, df.col2)). Ну и т.к. заполнять приходится сразу много документов, то делаю как-то так:

def doc_render(tmpl_path: str, tmpl_filename: str, output_path: str, output_filename: str, data_dict: dict) -> None:
    if not os.path.exists(output_path):
        if pathlib.Path(output_path).is_absolute():
            os.mkdirs(output_path)
        else:
            os.mkdirs(pathlib.Path.cwd() / output_path)
    doc = DocxTemplate(pathlib.Path(tmpl_path) / tmpl_filename)
    doc.render(data_dict)
    doc.save(output_path / output_filename)

С временем в дате решаю вопрос таким образом:

df.date_col = pd.to_date(df.date_col).dt.strftime('%d.%m.%Y')

Sign up to leave a comment.

Articles