Uvědomuji si, že to není otázka zcela související s unixem/linuxem. Ale protože to je něco, co budu dělat na linuxu, doufám, že někdo bude mít odpověď.
Mám online soubor Excel (.xlsx
), který je pravidelně aktualizován (někým jiným). Chci napsat skript a vložit ho jako cronjob, abych mohl zpracovat ten excelový list. Ale abych to udělal, musím to převést do textového souboru (takže .csv
) se sloupci oddělenými středníkem. Bohužel to nelze oddělit čárkou, protože některé sloupce obsahují čárky. Je vůbec možné provést tento převod ze shellu? Mám nainstalovaný Open office a mohu to udělat pomocí jeho GUI, ale chci vědět, jestli je to možné udělat z příkazového řádku. Díky!
PS:Mám také počítač Mac, takže pokud tam může fungovat nějaké řešení, je to také dobré. 🙂
Přijatá odpověď:
OpenOffice přichází s programem unoconv pro provádění převodů formátu na příkazovém řádku.
unoconv -f csv filename.xlsx
Pro složitější požadavky můžete analyzovat soubory XLSX pomocí Spreadsheet::XLSX
v Perlu nebo openpyxl
v Pythonu. Zde je například rychlý skript pro tisk listu jako souboru CSV odděleného středníkem (varování:netestováno, zadáno přímo v prohlížeči):
perl -MSpreadsheet::XLSX -e '
$ = "n"; $, = ";";
my $workbook = Spreadsheet::XLSX->new()->parse($ARGV[0]);
my $worksheet = ($workbook->worksheets())[0];
my ($row_min, $row_max) = $worksheet->row_range();
my ($col_min, $col_max) = $worksheet->col_range();
for my $row ($row_min..$row_max) {
print map {$worksheet->get_cell($row,$_)->value()} ($col_min..$col_max);
}
' filename.xlsx >filename.csv