[linux] 명령 줄을 사용하여 Linux에서 xlsx를 csv로 변환

Linux에서 xlsx 파일을 csv 파일로 변환하는 방법을 찾고 있습니다.

수백만 줄의 처리를보고 있기 때문에 PHP / Perl 등을 사용하고 싶지 않기 때문에 빠른 것이 필요합니다. xls2csv라는 우분투 저장소에서 프로그램을 찾았지만 현재 사용중인 xls (Office 2003) 파일 만 변환하지만 최신 Excel 파일에 대한 지원이 필요합니다.

어떤 아이디어?



답변

Gnumeric을의 스프레드 시트 응용 프로그램라는 명령 줄 유틸리티와 함께 제공 ssconvert 스프레드 시트 다양한 형식 사이의 변환을 할 수 있습니다 :

$ ssconvert Book1.xlsx newfile.csv
Using exporter Gnumeric_stf:stf_csv

$ cat newfile.csv
Foo,Bar,Baz
1,2,3
123.6,7.89,
2012/05/14,,
The,last,Line

우분투에 설치하려면 :

apt-get install gnumeric

Mac에 설치하려면

brew install gnumeric


답변

LibreOffice를 사용하여이 작업을 수행 할 수 있습니다.

libreoffice --headless --convert-to csv $filename --outdir $outdir

나에게 분명하지 않은 이유로 sudo로 이것을 실행해야 할 수도 있습니다. sudoers 파일에 다음 줄을 추가하여 암호 없이도 LibreOffice를 sudo와 함께 사용할 수 있습니다.

users ALL=(ALL) NOPASSWD: libreoffice


답변

데스크톱 환경이 이미있는 경우 Gnumeric / LibreOffice가 제대로 작동하지만 헤드리스 서버 (예 : Amazon Web Services)에서는 설치해야 할 수십 가지 종속성이 필요합니다.

이 파이썬 대안을 찾았습니다.

https://github.com/dilshod/xlsx2csv

$ easy_install xlsx2csv
$ xlsx2csv file.xlsx > newfile.csv

설치하는 데 2 ​​초가 걸렸으며 매력처럼 작동합니다.

시트가 여러 개인 경우 한 번에 또는 한 번에 하나씩 내보낼 수 있습니다.

$ xlsx2csv file.xlsx --all > all.csv
$ xlsx2csv file.xlsx --all -p '' > all-no-delimiter.csv
$ xlsx2csv file.xlsx -s 1 > sheet1.csv

또한 Bash, Python, Ruby 및 Java에 내장 된 여러 대안으로 연결됩니다.


답변

bash에서는이 libreoffice 명령을 사용하여 현재 디렉토리의 모든 xlsx 파일을 변환했습니다.

for i   in *.xlsx; do  libreoffice --headless --convert-to csv "$i" ; done

파일 이름에서 공백을 처리합니다.

몇 년 후 다시 시도했지만 작동하지 않았습니다. 이 스레드 는 몇 가지 팁을 제공하지만 가장 빠른 솔루션은 루트로 실행하는 것입니다 (또는 sudo libreoffice). 우아하지는 않지만 빠릅니다.

Windows에서 scalc.exe 명령을 사용하십시오.


답변

csvkit 사용

in2csv data.xlsx > data.csv

자세한 내용은 우수한 문서를 확인하십시오.


답변

또 다른 옵션은 편의를 위해 작은 bash 래퍼를 통해 R을 사용하는 것입니다.

xlsx2txt(){
echo '
require(xlsx)
write.table(read.xlsx2(commandArgs(TRUE)[1], 1), stdout(), quote=F, row.names=FALSE, col.names=T, sep="\t")
' | Rscript --vanilla - $1 2>/dev/null
}

xlsx2txt file.xlsx > file.txt


답변

.xlsx파일에 많은 시트가 있으면 -s플래그를 사용하여 원하는 시트를 얻을 수 있습니다. 예를 들면 다음과 같습니다.

xlsx2csv "my_file.xlsx" -s 2 second_sheet.csv

second_sheet.csv에 두 번째 시트의 데이터가 포함됩니다 my_file.xlsx.