Мне нужно преобразовать все листы одного файла .xls / .xlsx в .csv. Это будет сделано для всех файлов .xls во всех каталогах и подкаталогах (рекурсивно).
Шаг 1 : Получить имена листов всех .xls в .csv, используя:
for file in $(find . -name '*.xls' -o -name '*.xlsx');do in2csv -n "$file" > ${file%.xls}-sheetnames-list.csv; done
filename-sheetnames-list.csv
может выступать в качестве списка:
sheetname1
sheetname2
sheetname3
Шаг 2 : Код для преобразования определенного листа в .csv с использованием in2csv:
in2csv --sheet "SHEETNAME" filename.xls > filename-SHEETNAME.csv
Как я могу получить каждое имя листа в .xls / x и написать каждый лист отдельно для всех каталогов, содержащих .xls / x?
in2csv --write-sheets "-" filename.xls > filename-sheet1.csv filename-sheet2.csv ....
дает вывод только на sheet1.csv, не уверен, как получить все листы из этого.
command-line
csv
xls
csheth
источник
источник
find
каждый.xls{,x}
и перебрать каждый лист с помощью-exec
?Ответы:
Вы можете просто поместить цикл в другой цикл.
Чтобы избежать ошибок, не используйте
for
сfind
результатами.источник
.xls
in2csv --write-sheets "-" filename.xls > sheetname.csv
дает только первый лист. Я не знаю, какую дополнительную информацию добавить, чтобы написать все листы. Это даст нам ключи к исправлению вашего кода.pip install csvkit -U
, Я думаю, что это работает не то, что вам нравится, с простым сценарием из 1-го варианта у вас есть больше способов контролировать вывод, имена файлов и т. Д.--write-sheets
может быть, вы можете установить этот альтернативный вариант в качестве другого ответа ... Я приму первый вариант в качестве ответа тогда. Спасибо @RoVoПропуск поиска и использование bash:
источник
filename-{}.csv
содержит данных. Я новичок и, похоже, не могу найти ошибку, отредактировав сценарий и прочитав его. Немного помощи?xargs
. Исправлено, не так элегантно сейчас.xargs
и>
это зло Вот почему я предпочитаю другой цикл, он менее подвержен ошибкам.Версия CSVKIT> 1.0.2 имеет встроенную функцию для записи всех листов:
Таким образом, вы можете попробовать следующее:
Замечания:
Кажется, это не работает на 100%, как ожидалось. Но стоит попробовать, так как это первая версия с таким вариантом, возможно, в будущих версиях реализация будет лучше / проще.
источник
Используйте
Gnumeric
:чтобы получить один
csv
файл на листе.источник