Mir ist klar, dass dies nicht ist eine vollständig unix / linux-bezogene Frage. Aber da ich das unter Linux machen werde, hoffe ich, dass jemand eine Antwort hat.
Ich habe eine Online-Excel-Datei (.xlsx
), die regelmäßig (von jemand anderem) aktualisiert wird. Ich möchte ein Skript schreiben und es als Cronjob einfügen, um diese Excel-Tabelle zu verarbeiten. Aber dazu muss ich das in eine Textdatei umwandeln (also eine .csv
) mit Semikolon getrennten Spalten. Es kann leider nicht durch Kommas getrennt werden, da einige Spalten Kommas enthalten. Ist es überhaupt möglich, diese Konvertierung von der Shell aus durchzuführen? Ich habe Open Office installiert und kann dies über die GUI tun, möchte aber wissen, ob dies über die Befehlszeile möglich ist. Danke!
PS:Ich habe auch einen Mac-Computer, also wenn eine Lösung dort funktionieren kann, ist das auch gut. 🙂
Akzeptierte Antwort:
OpenOffice wird mit dem unoconv-Programm geliefert, um Formatkonvertierungen auf der Befehlszeile durchzuführen.
unoconv -f csv filename.xlsx
Für komplexere Anforderungen können Sie XLSX-Dateien mit Spreadsheet::XLSX
parsen in Perl oder openpyxl
in Python. Hier ist zum Beispiel ein Quickie-Skript, um ein Arbeitsblatt als semikolon-separierte CSV-Datei auszudrucken (Achtung:ungetestet, direkt in den Browser eingegeben):
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