J'ai besoin de convertir toutes les feuilles d'un seul fichier .xls / .xlsx en .csv. Cela se fera sur tous les fichiers .xls dans tous les répertoires et sous-répertoires (récursivement).
Étape 1 : Obtenez les noms de feuille de tous les .xls dans un .csv en utilisant:
for file in $(find . -name '*.xls' -o -name '*.xlsx');do in2csv -n "$file" > ${file%.xls}-sheetnames-list.csv; done
filename-sheetnames-list.csv
peut agir comme une liste:
sheetname1
sheetname2
sheetname3
Étape 2 : Le code pour convertir une feuille spécifique en .csv en utilisant in2csv est:
in2csv --sheet "SHEETNAME" filename.xls > filename-SHEETNAME.csv
Comment puis-je obtenir chaque nom de feuille dans un .xls / x et écrire chaque feuille séparément pour tous les répertoires contenant un .xls / x?
in2csv --write-sheets "-" filename.xls > filename-sheet1.csv filename-sheet2.csv ....
donne une sortie uniquement sur sheet1.csv, je ne sais pas comment obtenir toutes les feuilles à partir de cela.
la source
find
chaque.xls{,x}
et boucle sur chaque feuille à l' aide-exec
?Réponses:
Vous pouvez simplement mettre une boucle dans une autre boucle.
Pour éviter les erreurs, ne pas utiliser
for
avec lesfind
résultats.la source
.xls
in2csv --write-sheets "-" filename.xls > sheetname.csv
ne donne que la première feuille. Je ne sais pas quelles informations supplémentaires ajouter pour écrire toutes les feuilles. Cela nous donnera des indices pour corriger votre code.pip install csvkit -U
. Je pense que la façon dont cela fonctionne n'est pas ce que vous aimez, avec le simple skript de la première option, vous avez plus de façons de contrôler la sortie et les noms de fichiers, etc.--write-sheets
Peut-être vous pouvez définir cette option alternative comme une autre réponse ... J'accepterai alors la première option comme réponse. Merci @RoVoIgnorer la recherche et utiliser bash:
la source
filename-{}.csv
contient aucune donnée. Je suis novice et je n'arrive pas à trouver l'erreur en modifiant le script et en lisant. De l'aide?xargs
. Corrigé, pas aussi élégant maintenant.xargs
et>
est mauvais :-P. C'est pourquoi je préfère une autre boucle, elle est moins sujette aux erreurs.csvkit version> 1.0.2 a une fonction intégrée pour écrire toutes les feuilles:
Vous pouvez donc essayer ce qui suit:
Remarque:
Cela ne semble pas fonctionner à 100% comme prévu. Mais cela vaut la peine d'essayer et comme c'est la première version avec cette option, peut-être que dans les versions futures, la mise en œuvre est meilleure / plus facile.
la source
Utilisation
Gnumeric
:pour obtenir un
csv
fichier par feuille.la source