Estoy buscando una manera de convertir archivos xlsx a archivos csv en Linux.
No quiero usar PHP / Perl ni nada de eso, ya que estoy tratando de procesar varios millones de líneas, por lo que necesito algo rápido. Encontré un programa en los repositorios de Ubuntu llamado xls2csv pero solo convertirá archivos xls (Office 2003) (que estoy usando actualmente) pero necesito soporte para los archivos más nuevos de Excel.
¿Algunas ideas?
Respuestas:
La aplicación de hoja de cálculo Gnumeric viene con una utilidad de línea de comando llamada ssconvert que puede convertir entre una variedad de formatos de hoja de cálculo:
Para instalar en Ubuntu:
Para instalar en Mac:
fuente
for f in *.csv; do ssconvert "$f" "${f%.csv}.xlsx"; done
El método LibreOffice probablemente podría procesar otros formatos, pero no pude hacerlo funcionar (simplemente abriría un archivo en blanco cada vez, incluso con el--headless
argumento).apt-get install gnumeric --no-install-recommends
. El único inconveniente es que dispara muchas advertencias GConf-WARNING **: El cliente no pudo conectarse al daemon D-BUS durante la ejecución. Un simplessconvert oldfile.xlsx newfile.csv > /dev/null 2>&1
hará el truco.-S
bandera escriba varias hojas. Cada uno va a su propio archivo.ssconvert -O "separator=;" -T Gnumeric_stf:stf_assistant file.xlsx fd://1
.Puedes hacer esto con LibreOffice:
Por razones que no me quedan claras, es posible que deba ejecutar esto con sudo. Puede hacer que LibreOffice funcione con sudo sin requerir una contraseña agregando esta línea al archivo de sudoers:
fuente
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv $filename
Trabajé en OS X para mí.--convert-to "csv:Text - txt - csv (StarCalc):44,34,76,1,1/1"
. Ver wiki de open office para más detalles.Si ya tiene un entorno de escritorio, entonces estoy seguro de que Gnumeric / LibreOffice funcionaría bien, pero en un servidor sin cabeza (como Amazon Web Services), requieren docenas de dependencias que también necesita instalar.
Encontré esta alternativa a Python:
https://github.com/dilshod/xlsx2csv
Tomó 2 segundos para instalar y funciona de maravilla.
Si tiene varias hojas, puede exportarlas todas a la vez, o una a la vez:
También se vincula a varias alternativas creadas en Bash, Python, Ruby y Java.
fuente
IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/prettytable-0.7.2-py2.7.egg/EGG-INFO/top_level.txt'
). Ahora que lo pienso, recibí el mismo errorcsvkit
.xlsx2csv
paquete, por lo que no necesita instalarlo manualmente,easy_install
pero puede usar su administrador de paquetes.sudo easy_install xlsx2csv
En bash, utilicé este comando de libreoffice para convertir todos mis archivos xlsx en el directorio actual:
Se ocupa de espacios en el nombre del archivo.
Intenté nuevamente algunos años después, y no funcionó. Este hilo da algunos consejos, pero la solución más rápida fue ejecutar como root (o ejecutar a
sudo libreoffice
). No elegante, pero rápido.Use el comando scalc.exe en Windows
fuente
scalc.exe
más quelibreoffice
. Trabajó para mí hoy en la versión LO estable actual.Use csvkit
Para más detalles, consulte sus excelentes documentos
fuente
Otra opción sería usar R a través de un pequeño envoltorio bash para mayor comodidad:
fuente
Si el
.xlsx
archivo tiene muchas hojas,-s
se puede usar la bandera para obtener la hoja que desea. Por ejemplo:second_sheet.csv
contendría datos de la segunda hoja enmy_file.xlsx
.fuente
Usando la aplicación de hoja de cálculo Gnumeric que viene, una utilidad de línea de comandos llamada ssconvert es realmente súper simple:
¡y tu estas listo!
fuente
Si puede ejecutar la línea de comandos de Java, puede hacerlo con el Extractor de Excel de Apache POI HSSF . Tiene un
main
método que dice ser el extractor de línea de comando . Este parece simplemente deshacerse de todo. Señalan este ejemplo que convierte a CSV . Tendría que compilarlo antes de poder ejecutarlo, pero también tiene unmain
método, por lo que no debería tener que codificar mucho para que funcione.Otra opción que puede volar pero requerirá algo de trabajo en el otro extremo es hacer que sus archivos de Excel lleguen a usted como Excel XML Data u XML Spreadsheet de lo que MS llame ese formato en estos días. Le abrirá un mundo completamente nuevo de oportunidades para que pueda cortarlo y cortarlo en dados de la manera que desee.
fuente
Como otros dijeron,
libreoffice
puede convertir archivos xls a csv. El problema para mí fue la selección de la hoja.Este script de Python de libreoffice hace un buen trabajo al convertir una sola hoja a CSV.
El uso es:
El único inconveniente (por mi parte) es que
--headless
no parece funcionar. Tengo una ventana LO que aparece por un segundo y luego se cierra.Eso está bien conmigo, es la única herramienta que hace el trabajo rápidamente.
fuente