在 Linux CLI 上將 xlsx 格式文件轉換為 CSV 的 5 種方法

XLSX 是 Microsoft excel 使用的開放式 XML 電子表格文件格式的文件擴展名。 轉換微軟 Excel 使用命令行時,將工作表轉換為逗號分隔文件 (CSV) 相對非常容易。 當您有一個 XLS 文件並且您需要在格式化數據後從中填充數據庫時,這種情況可能會出現。 它在命令行中存在一些方法來進行不同格式文件的轉換。

1) Gnumeric 電子表格程序

Gnumeric 是 Unix 和類 Unix 操作系統的電子表格程序,根據 GNU 通用公共許可證分發。 它通過創建文件並在以後的會話中重新打開這些文件來存儲其信息。 它可以從多種格式導入和導出電子表格數據,包括 CSV、Microsoft Excel、HTML、OpenDocument、Quattro Pro 和 LaTex。

默認情況下,centos 7 的存儲庫中不存在 Gnumeric,您必須先安裝最新的 lux-release。 首先下載它

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

現在您可以安裝 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
couloir,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
couloir,file
road,

默認情況下,即使您的文件包含多個工作表,xlsx2csv 命令也只會轉換第一張工作表。 幸運的是,它提供了轉換所有工作表或選擇要轉換的工作表的可能性。 您可以使用一些有趣的參數:

  • -a, --all 導出所有工作表
  • -d DELIMITER 用於 csv 中的列分隔符
  • -p SHEETDELIMITER 對於用於分隔工作表的工作表分隔符,通過 '' 如果您不需要分隔符,或者 'x07' 或者 'f' 用於換頁(默認:’——–‘)
  • -s SHEETID 要轉換的工作表編號

為了 example, 如果您只想轉換特定的工作表

# 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 是一個為處理 CSV 文件而優化的 Python 庫。 它是使用 csv 格式操作、組織、分析和處理數據的好工具。 它非常輕便和快速。 它通過終端使用 in2csv 命令 它將各種常見的文件格式,包括 xls、xlsx 和固定寬度轉換為 CSV 格式。

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

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。 這意味著如果您不想使用不需要的格式,則應指明所需的格式。 因此,要使用 unoconv 命令在 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
couloir,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,

我們已經看到 Linux 上可用的不同工具可以在命令行上將任何 xlsx 文件格式轉換為 csv 文件。 您可以決定將文件轉換為 odt 或 pdf,並且可以使用 unoconv 和 libreoffice headless。 值得嘗試 米勒工具 它在格式之間進行轉換等等。