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"; doneLibreOffice 방법은 아마도 다른 형식을 처리 할 수는 있지만 작동시킬 수는 없습니다 (매번 빈 파일을 열 수도 있습니다.--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로 변환하는이 예제를 가리 킵니다 . 실행하기 전에 컴파일해야하지만 메소드도 있으므로 작동하기 위해 많은 코딩을 할 필요가 없습니다.mainmain
날아갈 수 있지만 다른 쪽 끝에서 약간의 작업이 필요한 다른 옵션은 Excel 파일을 요즘 형식화하는 모든 MS 호출의 Excel XML 데이터 또는 XML 스프레드 시트 로 제공하는 것입니다. 그것은 당신이 원하는 방식으로 슬라이스하고 주사위를 for 수있는 완전히 새로운 기회의 세계를 열어 줄 것입니다.
다른 사람들이 말했듯이 libreofficexls 파일을 csv로 변환 할 수 있습니다. 나에게 문제는 시트 선택이었습니다.
이 libreoffice Python 스크립트 는 단일 시트를 CSV로 변환 할 때 잘 작동합니다.
사용법은 :
./libreconverter.py File.xls:"Sheet Name" output.csv
내 단점은 유일 --headless하게 작동하지 않는 것입니다. LO 창이 1 초 동안 표시된 다음 종료됩니다.
그것은 나에게도 괜찮습니다. 그것은 작업을 빠르게 수행하는 유일한 도구입니다.