На одном из моих сайтов контент выводится из таблиц csv.
На одной странице может выводиться до двадцати таблиц, каждая из своего csv документа.
Время от времени эти таблицы приходится редактировать, иногда довольно часто.
Так же, желательно этим заниматься не одному, а в компании единомышленников.

Хорошим решением казалось тогда использование Google таблиц. Есть возможность назначать пользователей редакторами.
Так же из Google таблиц можно экспортировать прямо в csv, но... А вот это но как раз всё портило.
Заключалось оно в том что экспорт подразумевает под собой формат с разделителем запятой и в кодировке UTF-8.
Мне как раз надо было чтоб разделителем была точка с запятой, чтоб текст не брался в кавычки, чтоб кодировка была Win-1251.

И вот нашёлся на просторах интернета замечательный инструмент для работы из консоли - xlsx2csv.
Теперь мы по крону вытягиваем из Google таблиц многостраничный документ xlsx, обрабатываем его xlsx2csv, на выходе получаем каждую страницу в отдельном документе csv.

Создали в удобном месте файл generate.sh, а в него прописали следующие команды:
#!/bin/bash
cd /home/web/site.org.ua/ && wget -O tmp/table.xlsx https://docs.google.com/spreadsheets/d/1Fd8c6IJF4oLT1cs5QmZ1KK8/pub?output=xlsx && ./xlsx2csv.py -a -c cp1251 -d ";" -i tmp/table.xlsx tmp/ && cp -r tmp/*.csv public_html/images/tables

Объясню подробнее.

Сначала мы переходим в директорию из которой это всё выполняется
cd /home/web/site.org.ua/

потом скачиваем документ и сохраняем его с указанными нами названием и расширением
wget -O tmp/table.xlsx https://docs.google.com/spreadsheets/d/1Fd8c6IJF4oLT1cs5QmZ1KK8/pub?output=xlsx

обрабатываем с помощью xlsx2csv
./xlsx2csv.py -a -c cp1251 -d ";" -i tmp/table.xlsx tmp/

Здесь остановлюсь подробнее.
-a как раз говорит о том что нужно каждую страницу выводить в отдельный csv документ
-c желаемая кодировка (кодировка меняется только если xlsx2csv выполняется с помощью python 3)
-d желаемый разделитель
-i игнорировать пустые ячейки внизу (пустые ячейки справа сам не удаляет)
какой документ обрабатываем и куда кладём то, что получаем.

ну и копируем с заменой что получили на место рабочих документов
cp -r tmp/*.csv public_html/images/tables


Полный вывод справки доступен по --help.
Надеюсь что-то полезное из данного материала вы для себя почерпнули.
Добавить комментарий