在Linux CLI上将XLSX格式文件转换为CSV的5个方法

时间:2020-03-05 15:28:56  来源:igfitidea点击:

XLSX是Microsoft Excel使用的打开XML电子表格文件格式的文件扩展名。
使用命令行时,将Microsoft Excel表转换为逗号分隔文件(CSV)相对非常容易。
当我们有XLS文件时,情况可能会到达,并且在格式化数据后,我们需要从中填充数据库。
它在命令行中存在一些方法,以便执行不同格式文件的转换。

1)Gnumeric电子表格计划

Gnumeric是在GNU通用公共许可证下分发的UNIX和UNIX的操作系统的电子表格程序。
它通过在将来的会话期间创建文件并重新打开这些文件来存储其信息。
它可以将电子表格数据导入和从多种格式导出,包括CSV,Microsoft Excel,HTML,OpenDocument,Quattro Pro和LaTeX。

默认情况下不存在危险库中的CentOS 7的存储库,我们必须先安装最新的Lux-Release。
首先下载它

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

现在你可以安装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%]

使用Lux-Release安装了,我们现在可以通过包安装Gnumeric

# 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

现在,我们可以使用Gnumeric电子表格的SSconvert命令来转换文件

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

我们可以立即可视化文件

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

2)XLSX2CSV转换器

XLSX2CSV转换器是一个Python应用程序,它能够将一批XLSX/XLS文件转换为CSV格式。

我们可以确定要转换哪些表格。
如果我们有多个纸张,XLSX2CSV可以一次性地导出所有纸张或者一次。

要安装它,我们需要安装Python。
然后,我们可以如下所述:

# 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

现在,我们可以转换XLSX文件

# xlsx2csv book.xlsx > convert.csv

我们可以检查文件的内容

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

默认情况下,即使文件包含倍数表,XLSX2CSV命令也只转换第一个纸张。
幸运的是,它会消除可能的纸张或者选择要转换的可能性。
我们可以使用一些有趣的参数:

  • -a,--all要导出所有床单
  • -d分隔符为csv中的列分隔符
  • -p theptedelimiter for phother dremiter用于分隔工作表,通过'''如果我们不需要分隔符,或者'x07'或者'\ f'f for form feed(默认值:'----- ---')
  • `-s stordids for纸张号转换

例如,如果要仅转换特定工作表

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

你可以检查一下

# cat sheet2.csv 
sheet2
take
linux
centos

现在,如果要转换所有工作表,则可以如下所示

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

我们可以查看以下内容

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

我们可以看到默认分隔符有助于了解表格。

3)CSVKIT工具

CSvkit是一个优化的Python库,用于使用CSV文件。
使用CSV格式,它是一个很好的工具来操作,组织,分析和处理数据。
它非常轻盈,快速。
它是通过终端使用的,其中包含in2csv命令,它将各种常见文件格式转换为csv格式的xls,xlsx和固定宽度。

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

现在我们可以如下转换:

# in2csv Classeur2.xlsx > book3.csv

4)Unoco.

OpenOffice附带UnoCONV程序,以在命令行上执行格式转换。
如果安装OpenOffice,则默认情况下存在。
我们可以使用手册

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

该命令能够在各种文件格式之间进行转换。
默认情况下,它会在PDF中转换。
这意味着如果我们不想具有不希望的格式,则应指示所需的格式。
因此,要使用UNOCON命令转换CSV,我们需要使用两个主要参数:

  • -f表示请求的最终格式的输出文件
  • -o表示转换后的文件的名称和路径
# unoconv -f csv -o class2.csv Classeur2.xlsx

我们可以查看内容

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

请注意,我们原始XLSX文件的第二行是空的,这就是为什么我们在CSV文件的第二行中拥有逗号。

5)Libreoffice无头

通过从命令行开始libreoffice软件,我们可以分配各种参数,我们可以使用它来影响性能。
通过无头模式可以在没有任何图形接口组件的命令行中启动LibreOffice。
它使我们可以根据需要以某种格式转换文件。
因此,我们可以使用它来在CSV中转换XLSX文件。
我们需要使用指示的最终格式(CSV)与--convert-to参数后跟文件转换为如下所示:

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

现在你可以检查文件

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

我们可以直接转换一些XLSX文件如下:

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

我们可以看起来如下所示

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

我们可以检查一个文件的内容

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