लिनक्स में सीएसएल को कमांड लाइन के साथ xlsx कन्वर्ट करें


266

मैं xlsx फ़ाइलों को लिनक्स पर csv फाइलों में बदलने का एक रास्ता खोज रहा हूँ।

मैं PHP / पर्ल या ऐसा कुछ भी उपयोग नहीं करना चाहता हूं क्योंकि मैं कई लाखों लाइनों को देख रहा हूं, इसलिए मुझे कुछ जल्दी चाहिए। मुझे Ubuntuls पर एक प्रोग्राम मिला, जिसे xls2csv कहा गया, लेकिन यह केवल xls (Office 2003) फ़ाइलों को परिवर्तित करेगा (जो मैं वर्तमान में उपयोग कर रहा हूं) लेकिन मुझे नई Excel फ़ाइलों के लिए समर्थन की आवश्यकता है।

कोई विचार?


10
यह सोचते हुए कि एक स्क्रिप्टिंग भाषा के साथ लागू की गई कोई भी चीज़ धीमी गति से चल रही है, ऐसा लगता है ... थोड़ा गुमराह, विशेष रूप से क्योंकि उन भाषाओं के दिलचस्प पुस्तकालयों में सी। में लिखित बैकेंड हैं
चार्ल्स डफी

2
Excel 65536 पंक्तियों तक सीमित हुआ करता था। अब यह 1,048,576 ( support.microsoft.com/kb/120596 ) है। इसमें "लाखों लाइनों को अलग करना" फिट होना कठिन है। बस कह रही है ...
पावेल वेलर

1
@ फावड़ा कई फाइलों पर हो सकता है।
चार्ल्स डफी

2
... व्यक्तिगत रूप से, मैं पायथन के लिए xlsv लाइब्रेरी का उपयोग करूँगा, लेकिन चूंकि स्क्रिप्टिंग-आधारित दृष्टिकोण को प्रश्न से बाहर बताया गया है ... श्रग । (प्रोग्राम प्रोग्रामिंग टूल्स को उत्तर से बाहर रखा गया है तो यह एक प्रोग्रामिंग सवाल कैसे है?)
चार्ल्स डफी

1
@CharlesDuffy मैं वर्तमान में ऐसा करने के लिए एक PHP लाइब्रेरी का उपयोग कर रहा हूं, और xls2csv को 1 सेकंड में क्या करना है, इसे करने के लिए php 10 मिनट लगते हैं। सचमुच।
user1390150

जवाबों:


239

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

मैक पर स्थापित करने के लिए:

brew install gnumeric

19
वास्तव में स्प्रैडशीट को परिवर्तित करने का सबसे अधिक परेशानी मुक्त तरीका है। एक बैश स्क्रिप्ट के साथ संयुक्त, यह आपको कई फाइलों को बैच-प्रोसेस करने देगा। for f in *.csv; do ssconvert "$f" "${f%.csv}.xlsx"; doneलिब्रे ऑफिस विधि शायद अन्य प्रारूपों को संसाधित कर सकती है, लेकिन मैं इसे काम नहीं कर सका (यह हर बार एक खाली फाइल खोल देगा, यहां तक ​​कि --headlessतर्क के साथ भी )।
स्लीपब्लैंक

6
@sebleblanc काफी परेशानी मुक्त नहीं है। स्थापना एक दर्द है जो निर्भरता की संख्या को देखते हुए (यदि आप यह बिना सिर वाले सर्वर पर कर रहे हैं)। अब तक gcc, intltool, zlib-devel, GTK ... GTK के लिए glib, atk, pango, cairo, cairo-object, gdk-
pixbuf

11
मैं इसे एक हेडलेस डेबियन सर्वर पर स्थापित करने में कामयाब रहा apt-get install gnumeric --no-install-recommends। एकमात्र दोष यह है कि यह बहुत सारी आगाह करता है GConf-WARNING **: क्लाइंट डी-बस डेमॉन से कनेक्ट होने में विफल रहा। एक सिंपल ssconvert oldfile.xlsx newfile.csv > /dev/null 2>&1ट्रिक करेगी।
बेंजामिन डेलिचेयर

7
सीएसवी को लिखने के लिए आप चाहें तो -Sध्वज को कई शीट लिख सकते हैं । प्रत्येक अपनी फ़ाइल के लिए जाता है।
एड एविस

5
@hhh विभाजक विकल्प केवल txt निर्यात प्रकार के साथ काम करता है। आप इसका उपयोग प्रिंटआउट में प्रिंट करने के लिए कर सकते हैं ssconvert -O "separator=;" -T Gnumeric_stf:stf_assistant file.xlsx fd://1:।
विदेशी

135

आप लिबर ऑफिस के साथ ऐसा कर सकते हैं:

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

मेरे लिए स्पष्ट नहीं होने वाले कारणों के लिए, आपको इसे सुडो के साथ चलाने की आवश्यकता हो सकती है। आप sudo फ़ाइल में इस लाइन को जोड़कर पासवर्ड की आवश्यकता के बिना लिडो के साथ काम कर सकते हैं।

users ALL=(ALL) NOPASSWD: libreoffice

35
मैं यह कैसे बताऊंगा कि मुझे दूसरी शीट चाहिए?
dmeu

30
पासवर्ड के बिना हर किसी के लिए libreoffice के लिए sudo की अनुमति देना कीड़े के डिब्बे को खोल सकता है। कृपया परिणाम से सावधान रहें, जिसमें बहु-उपयोगकर्ता प्लेटफ़ॉर्म पर रूट अनुमतियाँ प्राप्त करने की संभावना भी शामिल है
Interarticle

5
यह मेरे लिए काम किया (sudo की आवश्यकता नहीं)। मेरा संस्करण: libreoffice-calc-3.6.7.2-4.fc18.x86_64
ब्रैड हेन

5
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv $filenameमेरे लिए OS X पर काम किया।
नोबू

12
Utf-8 में परिवर्तित होने के लिए, गैर-असिसी वर्णों को संरक्षित करना, इसके बजाय उपयोग करें --convert-to "csv:Text - txt - csv (StarCalc):44,34,76,1,1/1"। देखें खुला कार्यालय विकि जानकारी के लिए।
आर्येह लीब तौआरोग

132

यदि आपके पास पहले से ही डेस्कटॉप वातावरण है, तो मुझे यकीन है कि Gnumeric / LibreOffice अच्छी तरह से काम करेगा, लेकिन एक हेडलेस सर्वर (जैसे अमेज़ॅन वेब सर्विसेज) पर, उन्हें दर्जनों निर्भरता की आवश्यकता होती है जिन्हें आपको भी स्थापित करने की आवश्यकता होती है।

मुझे यह पायथन विकल्प मिला:

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

वह बाश, पायथन, रूबी, और जावा में निर्मित कई विकल्पों से भी जुड़ता है।


महान काम करता है, लेकिन मुझे केवल सूडो ( 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
user2105469

2
.... मेरे लिए बहुत अच्छा काम कर रहा था और -s विकल्प का उपयोग करके प्रत्येक शीट को व्यक्तिगत फ़ाइलों के निष्कर्षण की अनुमति दे रहा था - जहां लिबरेऑफ़िस शीट के आकार को संभालने में सक्षम नहीं था, xlsx2csv को कोई समस्या नहीं थी
सोरेन

धन्यवाद! Ubuntu में बहुत सुविधाजनक है।
zhuguowei

5
डेबियन और उबंटू में xlsx2csvपैकेज है, इसलिए आपको इसे मैन्युअल रूप से इंस्टॉल करने की आवश्यकता नहीं है easy_installलेकिन अपने पैकेज मैनेजर का उपयोग कर सकते हैं।
जोस

MacOS पर आप एक की आवश्यकता होगीsudo easy_install xlsx2csv
फ्रैंक Hintsch

32

बाश में, मैंने इस लिबर्रेफ़िस कमांड का उपयोग वर्तमान निर्देशिका में अपनी सभी xlsx फ़ाइलों को परिवर्तित करने के लिए किया:

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

यह फ़ाइल नाम में रिक्त स्थान का ख्याल रखता है।

कुछ साल बाद फिर से कोशिश की, और यह काम नहीं किया। यह धागा कुछ सुझाव देता है, लेकिन सबसे तेज समाधान रूट (या रनिंग sudo libreoffice) के रूप में चलना था । सुरुचिपूर्ण नहीं, लेकिन जल्दी।

विंडोज में कमांड scalc.exe का उपयोग करें


13
यह सुनिश्चित करने से पहले सुनिश्चित करें कि आप सभी ओपनऑफ़िस विंडो बंद कर दें, क्योंकि यह अन्यथा चुपचाप विफल हो जाएगा।
tacone 8

इसके अलावा, विंडोज पर, कमांड के scalc.exeबजाय है libreoffice। वर्तमान स्थिर LO संस्करण पर आज मेरे लिए काम किया।
एरोनानआमर्स


8

एक और विकल्प यह होगा कि सुविधा के लिए एक छोटे बैश रैपर के माध्यम से 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

8

यदि .xlsxफ़ाइल में कई शीट हैं, तो -sजिस शीट को आप चाहते हैं उसे प्राप्त करने के लिए ध्वज का उपयोग किया जा सकता है। उदाहरण के लिए:

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

second_sheet.csvमें 2 शीट का डेटा होगा my_file.xlsx


5

Gnumeric स्प्रेडशीट एप्लिकेशन का उपयोग करना जो आता है जो ssconvert नामक एक कमांडलाइन उपयोगिता वास्तव में सुपर सरल है:

find . -name '*.xlsx' -exec ssconvert -T Gnumeric_stf:stf_csv {} \;

और आपने कल लिया!


बहुत उपयोगी और धन्यवाद श्रीपस्कल-लुई पेरेज़
नागराज

1
उपरोक्त कमांड 'ssconvert' केवल 65536 लाइनों को परिवर्तित करता है, लेकिन मेरे पास एक से अधिक लाइनों की कमी है, क्या आप मेरी मदद कर सकते हैं?
कार्तिककुमार नागराज

4

यदि आप Java कमांड लाइन को चलाने के लिए ठीक हैं तो आप इसे Apache POI HSSF के एक्सेल एक्सट्रैक्टर से कर सकते हैं । यह एक mainविधि है जो कमांड लाइन एक्सट्रैक्टर होने के लिए कहती है । यह एक सब कुछ बाहर डंप करने के लिए लगता है। वे इस उदाहरण की ओर इशारा करते हैं जो CSV में परिवर्तित होता है । इसे चलाने से पहले आपको इसे संकलित करना होगा लेकिन इसकी एक mainविधि भी है इसलिए आपको इसे काम करने के लिए प्रति से ज्यादा कोडिंग नहीं करनी चाहिए।

एक अन्य विकल्प जो उड़ सकता है लेकिन दूसरे छोर पर कुछ काम करने की आवश्यकता होगी अपनी एक्सेल एक्सएमएल डेटा या एक्सएमएल स्प्रैडशीट के रूप में आपके पास आने वाली फाइलें इन दिनों जो भी फॉर्मेट करती हैं, उन्हें एक्सेल एक्सएमएल डेटा के रूप में आपके पास आना चाहिए। यह आपके लिए आपके द्वारा इच्छित तरीके से स्लाइस और पासा करने के अवसरों की एक पूरी नई दुनिया खोलेगा।


1
क्या आप जानते हैं कि यह भी .xlsx का समर्थन करता है?
धुंधला

1

जैसा कि दूसरों ने कहा, libreofficexls फ़ाइलों को सीएसवी में बदल सकते हैं। मेरे लिए समस्या पत्रक चयन की थी।

यह लिब्रेफॉइस पायथन लिपि एक एकल शीट को CSV में परिवर्तित करने का एक अच्छा काम करती है।

उपयोग है:

./libreconverter.py File.xls:"Sheet Name" output.csv

केवल नकारात्मक पक्ष (मेरे अंत पर) यह है कि --headlessकाम करने के लिए प्रतीत नहीं होता है। मेरे पास एक LO विंडो है जो एक सेकंड के लिए दिखाई देती है और फिर क्विट होती है।
यह मेरे साथ ठीक है, यह एकमात्र उपकरण है जो तेजी से काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.