Convierta xlsx a xls en script de shell de Linux

14

Necesito convertir el archivo ".xlsx" a ".xls" usando el comando de shell.

En mi trabajo, actualmente estamos usando el comando xlsx2csv, pero ahora se ha cambiado el requisito y necesitamos convertir todos los archivos ".xlsx" a archivos ".xls" para su posterior cálculo.

Para eso, alguien en mi trabajo ha desarrollado un comando que puede convertir ".xlsx" a ".xls" pero, eso es aplicable para una sola hoja.

Tenemos varias hojas en un archivo.

Gracias por adelantado....

Prem Joshi
fuente
También se puede hacer usando la biblioteca pyxl, esto hace lo contrario: stackoverflow.com/questions/9918646/how-to-convert-xls-to-xlsx
Mark

Respuestas:

20

Si instala LibreOffice, puede usar el siguiente comando:

libreoffice --headless --convert-to xls myfile.xlsx

o solo:

libreoffice --convert-to xls myfile.xlsx

en versión reciente (> = 4.5) donde --convert-toimplica --headless.

Esto creará myfile.xls y mantendrá el archivo myfile.xlsx original , por lo que probablemente tendrá que realizar una limpieza después de validar que la conversión se realizó correctamente.

forquare
fuente
Esta opción es muy buena, pero creo que hay un problema, abre la instancia de libreoffice y luego la convierte al archivo ".xls". ¿Hay alguna otra opción que no abra libreoffice y aún pueda convertir al archivo ".xls"? Me puede ayudar con esto ? @forquare
Prem Joshi
1
@PremJoshi Man page dice: "[--convert-to] implica --headhead". entonces la GUI no está abierta. Sin embargo, cuando lo inicia por primera vez después del arranque, puede mostrar una pantalla de inicio o algo así mientras registra los servicios (dependiendo de su escritorio).
lgeorget
1
@Igeorget! ¡La opción "- sin cabeza" funcionó para mí! Esta fue la respuesta exacta para mi pregunta.
Prem Joshi
3
El compromiso que --convert-toimplica --headlesses gerrit.libreoffice.org/… (versión 4.4). En versiones anteriores, se deben pasar ambas opciones.
lgeorget
1
Tenga en cuenta el límite de filas del formato xls 65535, ya que este comando no imprime ningún mensaje de advertencia si el archivo xlsx excede ese límite (generará un archivo de filas 65535 que no corresponde al original, sin advertencia)
golimar
6

también puedes probar ssconvertla herramienta de conversión complementaria de gnumeric

ssconvert in.xlsx out.xls

(como de costumbre, ver man ssconvert )

Para casos normales , esto está bien. Si el archivo de entrada es muy avanzado en ambos convertidores basados ​​en (libreoffice y gnumeric), se pueden perder algunos detalles.

JJoao
fuente