“MailMerge” для CSV + Markdown

Вопрос или проблема

Я помню из своих дней с MS Office функцию Слияние почты: у меня была таблица в Excel, шаблон в Word, и Слияние почты создавало документ Word из каждой строки в таблице Excel.

Теперь я полностью перешел на текстовые файлы: CSV для таблиц и Markdown для текста, и я хотел бы обработать CSV и шаблон в стек файлов Markdown (которые я затем конвертирую с помощью Pandoc в HTML/PDF).

A) Инструмент типа “Слияние почты”

Существует ли такой инструмент типа “Слияние почты” для этого рабочего процесса? Я предпочел бы инструмент командной строки, потому что все остальное в цепочке инструментов основано на CLI.

B) Инструмент для обоих направлений

Самая крутая функция была бы, если бы конвертация была возможна в обоих направлениях:

CSV+Markdown шаблон –> Группа документов Markdown

и наоборот

Группа документов Markdown –> CSV+Markdown шаблон

Я искал что-то подобное, и поскольку не смог найти это, я написал небольшой скрипт на Python, следуя принципам, изложенным rd_nielsen.

https://gist.github.com/frederik-elwert/5d0fee06aad946c75ef03084a2684233

Вы можете вызвать его так:

python3 pandoc-merge.py --csv addresses.csv -o merged_letter.pdf letter_template.md 

В вашем шаблоне вы можете использовать {{ variable }} и другие конструкции jinja2 для вставки содержимого из полей вашего CSV файла.

Если вы знакомы с R и современным R скриптингом:

Вы можете использовать пакет knitr в R, написать небольшой файл .Rmd и “связать” документ в markdown+html (+ опционально .docx и pdf) одним разом с помощью инструмента командной строки Rscript.

knitr имеет опцию “keep_md” в YAML front matter.

Вместе с пакетом blogdown R и генератором статических сайтов Hugo, вы можете построить хорошее шаблонное решение. (Вам не нужно строить веб-сайт).

Упомянутый вами “обратный путь” (от страницы к шаблону+csv) вероятно, невозможен.

Рассмотрите возможность использования языков шаблонов, таких как Jinja (https://palletsprojects.com/p/jinja/) или Airspeed (https://github.com/purcell/airspeed) в качестве вашего Markdown шаблона. Тогда вам просто нужен небольшой код (оба указанных выше ссылки ведут на библиотеки Python, так что Python будет разумным языком для использования), чтобы прочитать CSV файл и пропустить его через шаблон для генерации окончательного Markdown.

Эти два шага можно выполнить с помощью команд метаимпорта и метаэкспорта execsql.py. Дисклеймер: я его написал. Он даже может создать базу данных SQLite на лету, чтобы импортировать данные. Это инструмент командной строки. Однако он не удовлетворит ваше желание обратить процесс слияния почты.

Конвертируйте файл *.csv в отдельные файлы *.txt для данных и используйте этот инструмент, файл *.pdf можно импортировать как фон вместе с 5 файлами *.txt для данных, которые будут “наложены / объединены” на pdf файл.

https://sourceforge.net/projects/vdprocessor/

введите описание изображения здесь

Ответ или решение

Mail Merge: CSV + Markdown — Подробный Обзор

Переход на использование CSV для таблиц и Markdown для текстов открывает новые горизонты в автоматизации документооборота. В этом ответе мы рассмотрим, как обеспечить процесс Mail Merge для вашего рабочего цикла и какое программное обеспечение поможет вам в этом.

A) Инструменты для Mail Merge

Для реализации функционала, аналогичного Mail Merge, в комбинации CSV и Markdown, существует несколько подходящих инструментов. Основное внимание уделим простым в использовании командным инструментам, так как вы предпочитаете CLI-решения.

  1. Python Скрипты:
    Как вы уже упомянули, можно использовать Python для реализации Mail Merge с помощью CSV и Markdown. Например, скрипт, который вы нашли на Gist, позволяет вам выполнить команду, похожую на:

    python3 pandoc-merge.py --csv addresses.csv -o merged_letter.pdf letter_template.md

    Используя шаблон в формате Markdown, вы можете внедрять переменные из CSV-файла (например, {{ variable }}), что позволяет динамически формировать документы.

  2. Использование Jinja2:
    Особо следует упомянуть библиотеку Jinja2, которая позволяет создавать шаблоны с мощными функциями обработки данных. Небольшой скрипт на Python, использующий Jinja2, сможет сделать то же самое, что и вышеописанный Gist, но с дополнительными возможностями настройки.

  3. Pandoc:
    Pandoc, хотя и не является tool-ом непосредственно для Mail Merge, позволяет конвертировать Markdown в другие форматы, такие как HTML или PDF. Его можно легко интегрировать в ваш рабочий процесс.

B) Двусторонние инструменты

Когда речь заходит о двусторонней функциональности (CSV + Markdown → Документы Markdown и наоборот), это становится более сложным заданием.

  1. Конвертация из Markdown в CSV:
    В то время как создание документов из данных CSV вполне выполнимо, обратная задача — извлечение данных из готовых Markdown-документов для создания CSV — требует разработки. Существующих готовых решений для этого, к сожалению, нет. Однако можно написать пользовательский скрипт, который будет парсить Markdown и структурировать найденные данные в CSV формат. Это будет иметь определённые ограничения, учитывая стиль и форматирование Markdown.

  2. Использование R и knitr:
    Если вас не пугает использование R, пакет knitr позволяет создавать документацию в различных форматах и может быть использован как альтернатива для Markdown + CSV. Язык R также предоставляет мощные инструменты для анализа данных, что может быть полезно в вашем контексте.

    Rscript -e "knitr::knit('template.Rmd')"

Заключение

Таким образом, Mail Merge между CSV и Markdown в конечном итоге реализуем через комбинированные инструменты, такие как Python с Jinja2 и Pandoc, что позволяет автоматизировать создание документов. Однако двусторонняя функциональность останется ограниченной и потребует дополнительных усилий по разработке.

Резюмируя, вам предстоит выбрать подходящий инструмент, основываясь на своих предпочтениях в программировании и существующей инфраструктуре. HTML и PDF, созданные с использованием Pandoc, могут стать отличным финальным продуктом для ваших нужд.

Оцените материал
Добавить комментарий

Капча загружается...