Linux에서 xlsx 파일을 csv 파일로 변환하는 방법을 찾고 있습니다.
수백만 줄의 처리를보고 있기 때문에 PHP / Perl 등을 사용하고 싶지 않기 때문에 빠른 것이 필요합니다. xls2csv라는 우분투 저장소에서 프로그램을 찾았지만 현재 사용중인 xls (Office 2003) 파일 만 변환하지만 최신 Excel 파일에 대한 지원이 필요합니다.
어떤 아이디어?
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
for f in *.csv; do ssconvert "$f" "${f%.csv}.xlsx"; done
LibreOffice 방법은 아마도 다른 형식을 처리 할 수는 있지만 작동시킬 수는 없습니다 (매번 빈 파일을 열 수도 있습니다.--headless
인수로 ).
apt-get install gnumeric --no-install-recommends
. 유일한 단점은 많은 경고를 발생 시킨다는 것입니다. GConf-WARNING ** : 클라이언트가 실행 중 D-BUS 데몬에 연결하지 못했습니다 . 간단한 ssconvert oldfile.xlsx newfile.csv > /dev/null 2>&1
것이 트릭을 수행합니다.
-S
플래그가 여러 시트를 쓰도록 할 수 있습니다. 각각 자체 파일로 이동합니다.
ssconvert -O "separator=;" -T Gnumeric_stf:stf_assistant file.xlsx fd://1
.
LibreOffice를 사용하여이 작업을 수행 할 수 있습니다.
libreoffice --headless --convert-to csv $filename --outdir $outdir
나에게 분명하지 않은 이유로 sudo로 이것을 실행해야 할 수도 있습니다. sudoers 파일에 다음 줄을 추가하여 암호 없이도 LibreOffice를 sudo와 함께 사용할 수 있습니다.
users ALL=(ALL) NOPASSWD: libreoffice
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv $filename
나를 위해 OS X에서 일했습니다.
--convert-to "csv:Text - txt - csv (StarCalc):44,34,76,1,1/1"
. 자세한 내용은 오픈 오피스 위키 를 참조하십시오.
데스크톱 환경이 이미있는 경우 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에 내장 된 여러 대안으로 연결됩니다.
IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/prettytable-0.7.2-py2.7.egg/EGG-INFO/top_level.txt'
) 로만 실행할 수 있습니다 . 이제 생각해 보니와 같은 오류가 발생했습니다 csvkit
.
xlsx2csv
패키지가 있으므로 수동으로 설치할 필요는 easy_install
없지만 패키지 관리자를 사용할 수 있습니다.
sudo easy_install xlsx2csv
bash에서는이 libreoffice 명령을 사용하여 현재 디렉토리의 모든 xlsx 파일을 변환했습니다.
for i in *.xlsx; do libreoffice --headless --convert-to csv "$i" ; done
파일 이름에서 공백을 처리합니다.
몇 년 후 다시 시도했지만 작동하지 않았습니다. 이 스레드 는 몇 가지 팁을 제공하지만 가장 빠른 솔루션은 루트로 실행하는 것입니다 (또는 sudo libreoffice
). 우아하지는 않지만 빠릅니다.
Windows에서 scalc.exe 명령을 사용하십시오.
scalc.exe
아닌 libreoffice
입니다. 현재 안정적인 LO 버전에서 오늘 저를 위해 일했습니다.
ssconvert라는 명령 줄 유틸리티가 제공되는 Gnumeric 스프레드 시트 응용 프로그램을 사용하면 실제로 매우 간단합니다.
find . -name '*.xlsx' -exec ssconvert -T Gnumeric_stf:stf_csv {} \;
그리고 당신은 끝났습니다!
Java 명령 행을 실행해도 괜찮다면 Apache POI HSSF의 Excel Extractor를 사용 하여 수행 할 수 있습니다 . 그것은이 명령 줄 추출기로 말한다 방법 . 이것은 모든 것을 버리는 것 같습니다. CSV로 변환하는이 예제를 가리 킵니다 . 실행하기 전에 컴파일해야하지만 메소드도 있으므로 작동하기 위해 많은 코딩을 할 필요가 없습니다.main
main
날아갈 수 있지만 다른 쪽 끝에서 약간의 작업이 필요한 다른 옵션은 Excel 파일을 요즘 형식화하는 모든 MS 호출의 Excel XML 데이터 또는 XML 스프레드 시트 로 제공하는 것입니다. 그것은 당신이 원하는 방식으로 슬라이스하고 주사위를 for 수있는 완전히 새로운 기회의 세계를 열어 줄 것입니다.
다른 사람들이 말했듯이 libreoffice
xls 파일을 csv로 변환 할 수 있습니다. 나에게 문제는 시트 선택이었습니다.
이 libreoffice Python 스크립트 는 단일 시트를 CSV로 변환 할 때 잘 작동합니다.
사용법은 :
./libreconverter.py File.xls:"Sheet Name" output.csv
내 단점은 유일 --headless
하게 작동하지 않는 것입니다. LO 창이 1 초 동안 표시된 다음 종료됩니다.
그것은 나에게도 괜찮습니다. 그것은 작업을 빠르게 수행하는 유일한 도구입니다.