Довольно часто мне приходится обрабатывать XLS (M$ Excel) файлы: импортировать, конвертировать, преобразовывать и куда либо экспортировать. Мне приходилось экспериментировать с OOo/Python/QBasic, настраивать макросы эксперта в CVS и тд. Но недавно я нашёл утилитку xlhtml.Разумеется я не дочитал man и не ожидал от неё вывода в csv потому и навелосипедил вот такого монстра:
xlhtml -nh portalx.xls |sed 's/\t/\ /g' | sed -r 's/<(TABLE|TD|TR|FONT)[^>]+>/<\1>/g'|sed -r 's/<\/?(FONT|B)>//g'| tr -d "\n" |sed -r 's/<\/?(TABLE|TR)>/\n/g' |sed -r 's/<\/?TD>/\t/g' |sed 's/^\t//g' |sed '1,13d' |head -n -3|awk -F "\t" '{if(NF>0)print "\""""$1"\""",\""""$3"\""",\""""$5"\""",\""""$7"\""",\""""$9"\""",\""""$11"\""",\""""$13"\""",\""""$15"\""";"}' | sed 's/ //g' | gzip > portal.csv.gz
Этот монстр экспортирует XLS файл в HTML, а затем выдирает из HTML данные и формирует нужный CSV файл. Но как оказалось, спасибо строму бибигону, можно легко и просто вывести данные сразу в CSV:
xlhtml -xp:0 -csv -xc:0-7 -xr:6--1 portalx.xls | gzip > portal.csv.gz
Здесь указан 1 лист документ, с 1 по 8 колонки и с 6 по последняя -1 строки, приятным оказалось ещё то, что не нужно парится с кодировками
Кстати, для указания точного диапазона вывода строк, мне пришлось пропатчить эту утилитку, она не могла обработать конечное число диапазона выводимых строк кроме положительного и большего начального числа, но об этом в следующей заметке.