Comment convertir par lots .csv en .xls / xlsx

11

Je cherche un moyen de convertir rapidement un répertoire de fichiers .csv au format .xls ou .xlsx (ce serait bien si je pouvais faire l'un ou l'autre).

Existe-t-il un moyen simple de le faire ou dois-je installer un programme tiers?

mindless.panda
la source
1
Je ne sais pas pourquoi vous devriez le faire. csv est bien ouvert en excel. toute personne ayant besoin d'interagir pourrait simplement ouvrir sans problème.
Jody
2
Vous avez raison, Excel ouvre très bien csv et xls / xlsx. D'autres programmes, cependant, ne le font pas. =)
mindless.panda
1
Alors, dans quel programme souhaitez-vous l'utiliser?
Kirk

Réponses:

21

En supposant que vous aimez et avez Python (pour une raison quelconque), vous pouvez utiliser ce script que j'ai concocté:

import os
import glob
import csv
import xlwt # from http://www.python-excel.org/

for csvfile in glob.glob(os.path.join('.', '*.csv')):
    wb = xlwt.Workbook()
    ws = wb.add_sheet('data')
    with open(csvfile, 'rb') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader):
            for c, val in enumerate(row):
                ws.write(r, c, val)
    wb.save(csvfile + '.xls')

Ran dans le répertoire avec tous les fichiers CSV, il les convertira tous et gifle un ".xls" à la fin.

Pour Excel 2007+ (fichiers xlsx) prenant en charge jusqu'à environ 1 Mrows:

import os
import glob
import csv
import openpyxl # from https://pythonhosted.org/openpyxl/ or PyPI (e.g. via pip)

for csvfile in glob.glob(os.path.join('.', '*.csv')):
    wb = openpyxl.Workbook()
    ws = wb.active
    with open(csvfile, 'rb') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader, start=1):
            for c, val in enumerate(row, start=1):
                ws.cell(row=r, column=c).value = val
    wb.save(csvfile + '.xlsx')
Nick T
la source
2
Sur un Macintosh, j'ai utilisé la version xlsx ci-dessus. J'ai dû changer "rb" en "rU" pour contourner l'erreur "universal-newline mode" de Python. L'utilisation de "start = 1" pour "lignes en énumération" et "val en énumération" a créé une ligne vide au-dessus et une colonne vide à gauche des données réelles. J'ai changé les deux en "start = 0", ce qui a commencé les données dans la cellule A1 (en haut à gauche) de la feuille de calcul (Excel 2011). J'ai également changé la dernière ligne en "wb.save (os.path.splitext (csvfile) [0] + '.xlsx')" pour supprimer la partie .csv du fichier (par exemple, nnnn.csv.xlsx en nnnn. xlsx).
Michael S Taylor
1

Voici un script perl qui le fait censément, mais cela semble beaucoup de travail de faire quelque chose qui est déjà intégré à Excel.

Église
la source
1

Il y a beaucoup de choses non dites dans votre question.

En supposant que vos fichiers CVS se trouvent dans une structure de répertoires similaire à

c:\randompath\CSV\
    a.csv
    b.csv
    c.csv
      :
      :
    z.csv

et vous voulez vous retrouver avec

c:\randompath\XLS\
    a.xls
    b.xls
    c.xls
      :
      :
    z.xls

Je peux penser à trois voies à suivre en fonction du rapport entre le travail initial et le travail de nettoyage que vous êtes prêt à faire.

  1. Pas de précodage: utilisez l'Explorateur Windows pour naviguer vers les fichiers CSV, utilisez la méthode qui convient le mieux pour sélectionner les fichiers à convertir (lasso, ctrl + a, ctrl + clic, Maj + clic) puis cliquez avec le bouton droit sur l'un des fichiers sélectionnés et cliquez sur Ouvert. Cela ouvrira tous les fichiers dans Excel. Ensuite, pour chaque fichier, vous pouvez sélectionner "Fichier" et "Enregistrer sous" et enfin choisir le nouveau format de fichier dans lequel vous souhaitez l'enregistrer.
  2. Un fichier batch simple: ce fichier batch peut utiliser des caractères génériques et / ou une structure de boucle pour ouvrir chacun des fichiers CSV pour vous, puis vous pouvez les traiter manuellement comme auparavant.
  3. Créez un programme VBA dans une feuille de calcul Excel: VBA pourrait ouvrir automatiquement chaque fichier CSV, puis l'enregistrer au format Excel. Vous pouvez même ajouter une simple boîte de message qui offre un choix de xls ou xlsx à l'ouverture de chaque fichier.

Notez que je n'ai pas encore écrit de code pour faire ces choses. Je propose juste des idées pour un point de départ. Peut-être que si vous pouviez donner plus de détails sur ce que vous voulez, vous pourriez obtenir des explications plus détaillées sur la façon de gérer l'approche de ma part ou d'un autre membre du forum.

TedNewk
la source
0

Pour les fenêtres? La version en ligne de commande de CoolUtils " Total CSV Converter " prend en charge de nombreux formats de sortie, y compris JSON, Access, DBF, XML et SQL et ne coûte que 40 $. Il peut récupérer les sous-répertoires, supprimer les fichiers CSV d'origine, combiner tous les fichiers en un seul document, etc.

http://www.coolutils.com/TotalCSVConverter

CSVConverter.exe <source> <destination> <options>

" Advanced CSV Converter " (40-200 $) est un EXE portable qui peut le faire rapidement et sans avoir à installer Excel.

http://www.dbf2002.com/csv-converter/commandline.html

"c:\Program Files\CSV Converter\csvcnv.exe" c:\base\*.csv c:\exports\ /TOXLSX /SRCHDR

" Convert XLS " de SoftInterface peut utiliser Excel (mais n'est pas requis) et est plus cher (500 $ +), mais prend en charge plus de formats et a plus d'options.

http://www.softinterface.com/Convert-XLS/Convert-XLS.htm

"c:\Program Files (x86)\Softinterface, Inc\Convert XLS\ConvertXLS.exe" /V /S"c:\base\*.csv" /T"c:\exports\*.xlsx" /F6 /C51 /M2

" Gnumeric " est un tableur open source qui peut effectuer une conversion directe, mais il a été interrompu pour Windows en août 2014.

http://www.gnumeric.org/

ssconvert file.csv file.xlsx

Si vous avez installé Python, " csv2odf " est une option open-source et utilise une approche basée sur des modèles pour générer des fichiers ods, odt, html, xlsx ou docx.

http://sourceforge.net/projects/csv2odf/

csv2odf data.csv template.odt output.xlsx
user326177
la source
0

Avec Node 8+ et bash:

npm install -g pguardiario/csv2xlsx

for file in *.csv; do csv2xlsx "$file"; done
pguardiario
la source
-1

La manière simple: ouvrez votre fichier csv à partir de Microsoft Excel, convertissez le texte en colonnes (sélectionnez les cellules / texte, cliquez sur Menu - Données - Texte en colonnes) définissez votre option de conversion.

elaif
la source