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

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

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

Есть идеи?

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

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

С помощью 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 означает распечатать все листы.

Взгляни на

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

\ Спасибо {Bruni}

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