Je me rends compte que ce n'est pas une question entièrement liée à unix/linux. Mais puisque c'est quelque chose que je vais faire sur Linux, j'espère que quelqu'un a une réponse.
J'ai un fichier excel en ligne (.xlsx
) qui est mis à jour périodiquement (par quelqu'un d'autre). Je veux écrire un script et le mettre en tant que cronjob afin de traiter cette feuille Excel. Mais pour ce faire, j'ai besoin de le convertir en un fichier texte (donc un .csv
) avec des colonnes séparées par des points-virgules. Malheureusement, il ne peut pas être séparé par des virgules car certaines colonnes contiennent des virgules. Est-il possible de faire cette conversion à partir du shell ? J'ai installé Open Office et je peux le faire en utilisant son interface graphique, mais je veux savoir s'il est possible de le faire à partir de la ligne de commande. Merci !
PS:J'ai aussi une machine Mac, donc si une solution peut fonctionner là-bas, c'est bien aussi. 🙂
Réponse acceptée :
OpenOffice est livré avec le programme unoconv pour effectuer des conversions de format sur la ligne de commande.
unoconv -f csv filename.xlsx
Pour des besoins plus complexes, vous pouvez analyser les fichiers XLSX avec Spreadsheet::XLSX
en Perl ou openpyxl
en Python. Par exemple, voici un script rapide pour imprimer une feuille de calcul sous forme de fichier CSV séparé par des points-virgules (avertissement :non testé, saisi directement dans le navigateur) :
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