Mi rendo conto che questo non una domanda interamente relativa a unix/linux. Ma dato che questo è qualcosa che farò su Linux, spero che qualcuno abbia una risposta.
Ho un file excel online (.xlsx
) che viene aggiornato periodicamente (da qualcun altro). Voglio scrivere uno script e inserirlo come cronjob per elaborare quel foglio Excel. Ma per farlo, devo convertirlo in un file di testo (quindi un file .csv
) con colonne separate da punto e virgola. Sfortunatamente non può essere separato da virgole poiché alcune colonne contengono virgole. È possibile eseguire questa conversione dalla shell? Ho installato Open Office e posso farlo usando la sua GUI, ma voglio sapere se è possibile farlo dalla riga di comando. Grazie!
PS:ho anche una macchina Mac, quindi se qualche soluzione può funzionare lì, va bene lo stesso. 🙂
Risposta accettata:
OpenOffice viene fornito con il programma unoconv per eseguire conversioni di formato sulla riga di comando.
unoconv -f csv filename.xlsx
Per requisiti più complessi, puoi analizzare i file XLSX con Spreadsheet::XLSX
in Perl o openpyxl
in Python. Ad esempio, ecco uno script rapido per stampare un foglio di lavoro come file CSV separato da punto e virgola (avviso:non testato, digitato direttamente nel browser):
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