Cómo convertir por lotes .csv a .xls / xlsx


11

Estoy buscando una manera de convertir rápidamente un directorio de archivos .csv al formato .xls o .xlsx (sería bueno si pudiera hacer cualquiera de los dos).

¿Hay una manera fácil de hacer esto o necesito instalar un programa de terceros?


1
No estoy seguro de por qué necesitarías hacerlo. CSV está bien abierto en Excel. cualquiera que necesite interactuar podría abrir sin problemas.
Jody

2
Tienes razón Excel abre csv y xls / xlsx muy bien. Otros programas, sin embargo, no. =)
mindless.panda

1
Entonces, ¿en qué programa estás buscando usar esto?
Kirk

Respuestas:


21

Asumiendo que te gusta y tienes Python (por alguna razón), puedes usar este script que preparé:

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')

Se ejecutó en el directorio con todos los archivos CSV, los convertirá a todos y colocará un ".xls" al final.

Para Excel 2007+ (archivos xlsx) que admiten hasta aproximadamente 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')

2
En un Macintosh, utilicé la versión xlsx anterior. Tuve que cambiar "rb" a "rU" para evitar el error "modo universal-nueva línea" de Python. El uso de "inicio = 1" para "filas en enumerar" y "val en enumerar" creó una fila en blanco arriba y una columna en blanco a la izquierda de los datos reales. Cambié ambos a "inicio = 0", que inició los datos en la celda A1 (arriba a la izquierda) de la hoja de cálculo (Excel 2011). También cambié la última línea a "wb.save (os.path.splitext (csvfile) [0] + '.xlsx')" para eliminar la parte .csv del archivo (por ejemplo, nnnn.csv.xlsx a nnnn. xlsx).
Michael S Taylor

1

Aquí hay un script perl que supuestamente lo hace, pero parece mucho trabajo hacer algo que ya está integrado en Excel.


1

Queda mucho por decir en tu pregunta.

Asumiendo que sus archivos CVS están en una estructura de directorio similar a

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

y quieres terminar con

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

Puedo pensar en tres rutas a seguir dependiendo de la relación entre el trabajo inicial y el trabajo de limpieza que esté dispuesto a hacer.

  1. Sin precodificación: use el Explorador de Windows para navegar a los archivos CSV, use el método que funcione mejor para seleccionar los archivos a convertir (lazo, ctrl + a, ctrl + clic, shift + clic), luego haga clic derecho en uno de los archivos seleccionados y haga clic en Abierto. Esto abrirá todos los archivos en Excel. Luego, para cada archivo, puede seleccionar "Archivo" y "Guardar como" y finalmente elegir el nuevo formato de archivo en el que desea guardarlo.
  2. Un archivo por lotes simple: ese archivo por lotes podría usar comodines y / o a para cada estructura de bucle para abrir cada uno de los archivos CSV por usted y luego podría procesarlos manualmente como antes.
  3. Cree un programa VBA dentro de una hoja de cálculo de Excel: VBA podría abrir automáticamente cada archivo CSV y luego guardarlo en un formato Excel. Incluso podría agregar un cuadro de mensaje simple que ofrezca una opción de xls o xlsx a medida que se abre cada archivo.

Tenga en cuenta que todavía no he escrito ningún código para hacer estas cosas (todavía) solo estoy ofreciendo ideas para un punto de partida. Quizás si pudiera dar más detalles sobre lo que desea, podría obtener explicaciones más detalladas sobre cómo manejar el enfoque de mí u otro miembro del foro.


0

¿Para ventanas? La versión de línea de comandos CoolUtils " Total CSV Converter " admite muchos formatos de salida, incluidos JSON, Access, DBF, XML y SQL, y solo cuesta $ 40. Puede recurrir subdirectorios, eliminar archivos CSV originales, combinar todos los archivos en un documento y más.

http://www.coolutils.com/TotalCSVConverter

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

" Advanced CSV Converter " ($ 40-200) es un EXE portátil que puede hacerlo rápidamente y sin tener que instalar Excel.

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

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

SoftInterface " Convert XLS " puede usar Excel (pero no es obligatorio) y es más costoso ($ 500 +), pero admite más formatos y tiene más opciones.

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 " es un programa de hoja de cálculo de código abierto que puede realizar una conversión directa, pero se suspendió para Windows en agosto de 2014.

http://www.gnumeric.org/

ssconvert file.csv file.xlsx

Si tiene instalado Python, " csv2odf " es una opción de código abierto y utiliza un enfoque con plantilla para generar archivos ods, odt, html, xlsx o docx.

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

csv2odf data.csv template.odt output.xlsx

0

Con Nodo 8+ y bash:

npm install -g pguardiario/csv2xlsx

for file in *.csv; do csv2xlsx "$file"; done

-1

La manera fácil: abra su archivo csv desde Microsoft Excel, convierta texto en columnas (seleccione las celdas / texto, haga clic en Menú - Datos - Texto en columnas) configure su opción para convertir.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.