Как разделить файл электронной таблицы ODS на файлы CSV на лист на терминале?

Я хотел бы разделить электронную таблицу (передозировки или xlsx) в несколько файлов CSV, один для каждого листа в электронной таблице.

Я хотел бы сделать это, не запуская графическое приложение и предпочтительно в одном лайнере.

Какие-либо идеи?

Хотя связанный дубликат предоставляет возможное решение в одном из ответов (не в принятом) и был полезен. Решение не работает с файлами ODS, как я запросил, и я рассматриваю вопрос достаточно отличаться.

6
задан 11 June 2018 в 13:56

3 ответа

Ну, libreoffice может конвертировать документы из скрипта (то есть в режиме без головы без открытия графического интерфейса). Чтобы преобразовать любой формат электронной таблицы в CSV, его простейшая форма будет выглядеть, например, как

libreoffice --convert-to csv PATH/TO/YOUR.ODS

Однако, это просто берет первый лист вашего документа и преобразует его, игнорируя все остальные. К сожалению, в нем также нет возможности выбрать лист для конвертации.


Итак, нам понадобится внешний инструмент, такой как xlsx2csv . Это Python-скрипт с открытым исходным кодом (как 2, так и 3), который конвертирует файлы XLSX в CSV и поддерживает извлечение всех листов в отдельные файлы.

Ubuntu уже поставляется с установленным Python, но, возможно, вам сначала нужно установить pip, его менеджер пакетов. Я собираюсь на Python 3, но вы можете изменить все команды ниже, чтобы запустить его также с 2:

sudo apt install python3-pip

Затем вы можете установить xlsx2csv с pip3 в каталог пакетов вашего пользователя, используя

pip3 install --user xlsx2csv

После этого исполняемый скрипт можно найти в ~/.local/bin/xlsx2csv.


Теперь, если у вас его еще нет в формате XLSX, давайте преобразуем эту электронную таблицу ODS с libreoffice:

libreoffice --convert-to xlsx PATH/TO/YOUR.ods

Затем мы используем xlsx2csv для извлечения всех листов. Он создаст папку OUTPUTFOLDER и поместит туда все извлеченные SHEETNAME.csv:

~/.local/bin/xlsx2csv -a YOUR.xlsx OUTPUTFOLDER
5
ответ дан 23 November 2019 в 07:27

Взгляните на

ssconvert -O 'separator=:: format=raw quoting-mode=never' -S x.ods  out%n.txt

\ спасибо {Бруни}

  • -O 'separator= format= ...' используется для управления деталями формата csv
  • -S создать отдельный выходной файл для каждого листа
2
ответ дан 23 November 2019 в 07:27

Используя xls2csv (для преобразования.XLS) инструмент catdoc установка пакета sudo apt install catdoc:

xls2csv -b '
' EXCEL.xls | awk '{print >"sheet"NR}' RS='\n\n'

Это xls2csv -b ' ' EXCEL.xls файл MS-Excel чтений и помещает свое содержание как разделенные от запятой данные по стандартному выводу и с -b STRING мы говорим листы разграниченному с какой символы (или строка; который мы определили фактическую новую строку здесь).


Использовать xlsx2csv (для преобразования.XLSX); установка sudo apt install xlsx2csv:

xlsx2csv -s 0 EXCEL.xlsx |
    awk '!/,/ { nextSheet++; next } { print >"sheet"nextSheet }'

-s 0 средства печатают все листы.

4
ответ дан 23 November 2019 в 07:27

Другие вопросы по тегам:

Похожие вопросы: