5 métodos para convertir archivos de formato xlsx a CSV en la CLI de Linux

XLSX es una extensión de archivo para un formato de archivo de hoja de cálculo XML abierto utilizado por Microsoft Excel. Conversión de Microsoft Excel hoja a un archivo separado por comas (CSV) es relativamente muy fácil al usar la línea de comando. La situación puede llegar cuando tiene un archivo XLS y necesita llenar la base de datos después de formatear los datos. Existen algunos métodos en la línea de comandos para hacer la conversión de los diferentes formatos de archivos.

1) programa de hoja de cálculo Gnumeric

Gnumeric es un programa de hoja de cálculo para Unix y sistemas operativos similares a Unix distribuidos bajo la Licencia Pública General GNU. Almacena su información creando archivos y volviendo a abrir estos archivos durante una sesión futura. Puede importar y exportar datos de hojas de cálculo desde y hacia múltiples formatos, incluidos CSV, Microsoft Excel, HTML, OpenDocument, Quattro Pro y LaTex.

Gnumeric no está presente de forma predeterminada en el repositorio de centos 7, primero debe instalar la última versión de lux. Primero descárgalo

# wget https://repo.iotti.biz/CentOS/7/noarch/lux-release-7-1.noarch.rpm
--2017-10-13 23:32:19-- https://repo.iotti.biz/CentOS/7/noarch/lux-release-7-1.noarch.rpm
Resolving repo.iotti.biz (repo.iotti.biz)... 156.54.7.11
Connecting to repo.iotti.biz (repo.iotti.biz)|156.54.7.11|:80... connected.

Ahora puede instalar la versión lux

# rpm -Uvh lux-release-7-1.noarch.rpm 
warning: lux-release-7-1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID 53e4e7a9: NOKEYCSV
Preparing... ################################# [100%]
Updating / installing...
 1:lux-release-7-1 ################################# [100%]

Con lux-release instalado, ahora podemos instalar gnumeric a través del paquete

# yum install gnumeric
Loaded plugins: fastestmirror, langpacks
lux | 2.9 kB 00:00:00 
lux/7/primary_db | 1.0 MB 00:00:05 
Loading mirror speeds from cached hostfile
 * base: ftp.hosteurope.de
 * epel: mirror.liquidtelecom.com
 * extras: ftp.hosteurope.de
 * updates: ftp.hosteurope.de
Resolving Dependencies
--> Running transaction check
---> Package gnumeric.x86_64 1:1.10.10-2.el7.lux.1 will be installed

Ahora puede usar el comando ssconvert de la hoja de cálculo gnumeric para convertir el archivo

# ssconvert book.xlsx file.csv
Using exporter Gnumeric_stf:stf_csv

Puedes visualizar el archivo ahora

# cat file.csv 
fichier,
paul,
nathan,couvert
couloir,file
road,

2) convertidor xlsx2csv

xlsx2csv Converter es una aplicación de Python que es capaz de convertir un lote de archivos XLSX / XLS a formato CSV. Puede especificar exactamente qué hojas se convertirán. Si tiene varias hojas, xlsx2csv le da la posibilidad de exportar todas las hojas a la vez, o una a la vez.

Para instalarlo, debe tener Python ya instalado. Luego, puede proceder de la siguiente manera:

# easy_install xlsx2csv
Searching for xlsx2csv
Reading https://pypi.python.org/simple/xlsx2csv/
Best match: xlsx2csv 0.7.3
Downloading https://pypi.python.org/packages/4c/56/4c7f595525839710ab563c8e5a48226021111c1324b1460e603256f7665c/xlsx2csv-0.7.3.tar.gz#md5=b9cffbbe815259987237135f99658c63
Processing xlsx2csv-0.7.3.tar.gz

Ahora puedes convertir tu archivo xlsx

# xlsx2csv book.xlsx > convert.csv

Puedes comprobar el contenido del archivo.

# cat convert.csv 
fichier,
paul,
nathan,couvert
couloir,file
road,

De forma predeterminada, el comando xlsx2csv convierte solo la primera hoja, incluso si su archivo contiene varias hojas. Afortunadamente, ofrece la posibilidad de convertir todas las hojas o elegir la que desee convertir. Puedes usar algunos parámetros interesantes:

  • -a, --all para exportar todas las hojas
  • -d DELIMITER para el delimitador de columnas en csv
  • -p SHEETDELIMITER para el delimitador de hoja utilizado para separar hojas, pase '' si no necesita delimitador, o 'x07' o 'f' para alimentación de formulario (predeterminado: ‘——–‘)
  • -s SHEETID para que el número de hoja se convierta

Para example, si desea convertir solo una hoja específica

# xlsx2csv class.xlsx -s 2 > sheet2.csv

Puedes comprobar

# cat sheet2.csv 
sheet2
take
linux
centos

Ahora, si desea convertir toda la hoja, puede hacer lo siguiente

# xlsx2csv class.xlsx --all > allsheet.csv

Puede consultar el contenido de la siguiente manera

# cat allsheet.csv 
-------- 1 - Sheet1
fichier
road
-------- 2 - Sheet2
sheet2
take
linux
centos
-------- 3 - Sheet3
devops
script
lxd

Puede ver que el delimitador predeterminado ayuda a conocer las hojas.

3) herramienta csvkit

csvkit es una biblioteca de Python optimizada para trabajar con archivos CSV. Es una buena herramienta para manipular, organizar, analizar y trabajar con datos, usando el formato csv. Es muy ligero y rápido. Se utiliza a través del terminal con su comando in2csv que convierte una variedad de formatos de archivo comunes, incluidos xls, xlsx y de ancho fijo en formato CSV.

# pip install csvkit
Collecting csvkit
 Using cached csvkit-1.0.2.tar.gz
Collecting agate>=1.6.0 (from csvkit)

Ahora puede convertir de la siguiente manera:

# in2csv Classeur2.xlsx > book3.csv

4) unoconv

OpenOffice viene con el programa unoconv para realizar conversiones de formato en la línea de comando. Está presente de forma predeterminada si está instalado openoffice. Puedes usar el manual

# unoconv --help
usage: unoconv [options] file [file2 ..]

Convert from and to any format supported by LibreOffice

unoconv options:
  -c, --connection=string  use a custom connection string
  -d, --doctype=type       specify document type
                             (document, graphics, presentation, spreadsheet)
  -e, --export=name=value  set export filter options
                             eg. -e PageRange=1-2
  -f, --format=format      specify the output format
  -i, --import=string      set import filter option string
                             eg. -i utf8
  -l, --listener           start a permanent listener to use by unoconv clients
  -n, --no-launch          fail if no listener is found (default: launch one)
  -o, --output=name        output basename, filename or directory
      --pipe=name          alternative method of connection using a pipe
  -p, --port=port          specify the port (default: 2002)
                             to be used by client or listener
      --password=string    provide a password to decrypt the document
  -s, --server=server      specify the server address (default: 127.0.0.1)
                             to be used by client or listener
      --show               list the available output formats
      --stdout             write output to stdout
  -t, --template=file      import the styles from template (.ott)
  -T, --timeout=secs       timeout after secs if connection to listener fails
  -v, --verbose            be more and more verbose (-vvv for debugging)

El comando puede convertir entre varios formatos de archivo. de forma predeterminada, convierte en pdf. Significa que debe indicar el formato deseado si no desea tener un formato no deseado. Entonces, para convertir en csv con el comando unoconv, necesita usar dos parámetros principales:

  • -f que indica la solicitud el formato final del archivo de salida
  • -o para indicar el nombre y la ruta del archivo convertido
# unoconv -f csv -o class2.csv Classeur2.xlsx

Puedes consultar el contenido

# cat class2.csv 
fichier,
,
,couvert
,file
road,

Tenga en cuenta que la segunda fila de nuestro archivo xlsx original está vacía, por eso tiene la coma en la segunda línea del archivo csv.

5) Libreoffice sin cabeza

Al iniciar el software LibreOffice desde la línea de comandos, puede asignar varios parámetros con los que puede influir en el rendimiento. Es posible a través del modo sin cabeza que le ayudan a iniciar LibreOffice en la línea de comandos sin ningún componente de interfaz gráfica. Te da la posibilidad de convertir archivos en algunos formatos que necesites. Entonces, puede usarlo para convertir archivos xlsx en csv. Debe utilizar el formato final (csv) indicado con el--convert-to parámetro seguido del archivo para convertir como se muestra a continuación:

# libreoffice --headless --convert-to csv book.xlsx --outdir conv/
convert /home/admin/Desktop/book.xlsx -> /home/admin/Desktop/conv/book.csv using filter : Text - txt - csv (StarCalc)

Ahora puedes consultar el archivo

# cat conv/book.csv 
fichier,
paul,
nathan,couvert
couloir,file
road,

Puede convertir directamente algunos archivos xlsx de la siguiente manera:

# libreoffice --headless --convert-to csv --outdir conv/ *.xlsx
convert /home/admin/Desktop/book.xlsx -> /home/admin/Desktop/conv//book.csv using filter : Text - txt - csv (StarCalc)
convert /home/admin/Desktop/Classeur1.xlsx -> /home/admin/Desktop/conv//Classeur1.csv using filter : Text - txt - csv (StarCalc)
convert /home/admin/Desktop/Classeur2.xlsx -> /home/admin/Desktop/conv//Classeur2.csv using filter : Text - txt - csv (StarCalc)
convert /home/admin/Desktop/class.xlsx -> /home/admin/Desktop/conv//class.csv using filter : Text - txt - csv (StarCalc)

Puedes mirar el convertido de la siguiente manera

[root@centos7-srv Desktop]# ls conv
book.csv class.csv Classeur1.csv Classeur2.csv

Puede verificar el contenido de un archivo

# cat conv/Classeur2.csv 
fichier,
,
,couvert
,file
road,

Hemos visto las diferentes herramientas disponibles en Linux para convertir cualquier formato de archivo xlsx en un archivo csv en la línea de comandos. Puede decidir convertir el archivo en odt o pdf y es posible con unoconv y libreoffice headless. Vale intentarlo Herramienta Miller que hace conversión entre formatos y más.