¿Hay alguna manera, idealmente usando la línea de comando, para convertir múltiples archivos .csv en una hoja de cálculo .xls de varias hojas?

14

¿Hay alguna manera, idealmente usando la línea de comando, para convertir múltiples archivos .csv en una hoja de cálculo .xls de varias hojas?

Si no hay una solución cli, sería bueno saber si hay una API que funcione, idealmente, awk o pascal, pero, en su defecto, en casi cualquier cosa.

Peter Brooks
fuente
ssconvert, mencionado por Maythux, es un comando complementario de Gnumeric, que se instalará de manera predeterminada en un sistema Ubuntu Desktop, pero no en una versión de servidor.
Arronical
Dado el hecho de que Excel cargará CSV en un .xlsarchivo que simplemente podría hacer:cat *.csv > file.xls
ceniza
prueba esto
Lety
1
ssconvert hace el truco perfectamente. Lo que necesitaba era tener cada archivo .csv en una hoja separada. Usar gato no logra eso. ssconvert lo hace.
Peter Brooks
@ash csv y xls son formatos diferentes, capturar un montón de csvs en un archivo y renombrarlo xls no funcionará en absoluto, ya que csvs no admite varias hojas, por lo que solo haría un csv largo, y también porque csv es un formato de texto plano, mientras que xls es un formato binario
chiliNUT

Respuestas:

16

Puede usar el comando ssconvert .

ssconvert example.csv example.xls

Para hacerlo para varios archivos, debe hacer un bucle bash sobre archivos csv y hacer el trabajo. Aquí una pista:

for i in *.csv; do ssconvert "$i" "${i%.*}".xls; done

EDITAR:

Para convertir y combinar en un solo archivo xls, también puede usar ssconvert.

ssconvert --merge-to=output.xls file1.csv file2.csv ....

o fácilmente

ssconvert --merge-to=output.xls *.csv 
Maythux
fuente
1
Es vital citar las variables, ya que "$i" "${i%.*}".xls, de lo contrario, cualquier nombre de archivo que contenga un espacio romperá el comando (y posiblemente sobrescribirá un archivo no relacionado).
Paddy Landau