Comment convertir un fichier Excel avec plusieurs feuilles en un ensemble de fichiers CSV?

23

J'ai un fichier Excel avec 20 feuilles dessus. Existe-t-il un moyen de convertir rapidement le fichier en 20 fichiers CSV - un pour chaque feuille?

Je peux le faire manuellement bien sûr, mais je devrai beaucoup traiter ces fichiers, donc ce serait génial d'avoir une sorte d'utilitaire de ligne de commande (ou même des commutateurs de ligne de commande Excel).

AngryHacker
la source

Réponses:

17

La méthode de vembutech est définitivement une solution plus raffinée. Voici une macro VBA légère qui exporterait toutes les feuilles d'un classeur.

Va dans le dossier des classeurs actifs, tous les noms sont workbookname_sheetname.csv

Sub exportcsv()
Dim ws As Worksheet
Dim path As String

path = ActiveWorkbook.path & "\" & Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1)
For Each ws In Worksheets
    ws.Activate
    ActiveWorkbook.SaveAs Filename:=path & "_" & ws.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False
Next
End Sub

MODIFIER:

Pour le commentaire. La macro d'origine utilise simplement la fonction d'enregistrement en tant que (ce qui revient à fermer l'original). Si vous souhaitez le faire tout en laissant l'original ouvert, vous devez copier dans un nouveau classeur, enregistrer, fermer le nouveau classeur.

Sub exportcsv()
Dim ws As Worksheet
Dim path As String

path = ActiveWorkbook.path & "\" & Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1)
For Each ws In Worksheets
    ws.Copy
    ActiveWorkbook.SaveAs Filename:=path & "_" & ws.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False
    ActiveWorkbook.Close False
Next
End Sub
gtwebb
la source
Je viens de monter Run-time error '1004': Application-defined or object-defined errorsur mon Excel pour Mac.
bryan
8

Au lieu d'un script batch, vous pouvez utiliser le convertisseur XLS en CSV qui vous offrirait une meilleure interface utilisateur

Lien direct: http://cwestblog.com/wp-content/uploads/2013/04/XLS-to-CSV-Converter-1.1.0.zip

Décompressez le fichier .HTA.

Double-cliquez sur le fichier .HTA

entrez la description de l'image ici

Localisez le dossier où vous avez votre fichier xls

sélectionnez le schéma de nommage csv et cliquez sur démarrer la conversion qui convertira tous les fichiers xls du dossier en fichiers csv

Si votre dossier contient 3 fichiers xls avec 3 feuilles, il créerait 9 fichiers csv pour chaque feuille et vous pouvez identifier le fichier csv avec le schéma de dénomination csv

J'espère que cela t'aides!

vembutech
la source
6

Voici un script python getsheets.py ( miroir ), vous devez installer pandaset xlrdavant de l'utiliser.

Lance ça:

pip3 install pandas xlrd  # or `pip install pandas xlrd`

Comment ça fonctionne?

$ python3 getsheets.py -h
Usage: getsheets.py [OPTIONS] INPUTFILE

Convert a Excel file with multiple sheets to several file with one sheet.

Examples:

    getsheets filename

    getsheets filename -f csv

Options:
-f, --format [xlsx|csv]  Default xlsx.
-h, --help               Show this message and exit.

Convertir en plusieurs xlsx:

$ python3 getsheets.py goods_temp.xlsx
Sheet.xlsx Done!
Sheet1.xlsx Done!

All Done!

Convertir en plusieurs csv:

$ python3 getsheets.py goods_temp.xlsx -f csv
Sheet.csv Done!
Sheet1.csv Done!

All Done!
Scott Ming
la source
1
Aussi: pip3 install openpyxl click ... et je reçois ensuite la ImportError: cannot import name 'get_column_letter'ligne 513 de pandas excel.py; Je suppose que mon installation de pandas est en quelque sorte cassée.
Jameson Quinn
3

Une macro d' ExtendOffice pour enregistrer les onglets dans votre dossier Documents:

Sub ExportSheetsToCSV()
    Dim xWs As Worksheet
    Dim xcsvFile As String
    For Each xWs In Application.ActiveWorkbook.Worksheets
        xWs.Copy
        xcsvFile = CurDir & "\" & xWs.Name & ".csv"
        Application.ActiveWorkbook.SaveAs Filename: = xcsvFile, _
        FileFormat: = xlCSV, CreateBackup: = False
        Application.ActiveWorkbook.Saved = True
        Application.ActiveWorkbook.Close
    Next
End Sub
Michel de Ruiter
la source