Linux कमांड लाइन में xlsx को csv में कनवर्ट करें




excel converter (9)

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


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

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

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

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

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


आप ओपन / लिबर ऑफिस स्प्रेडशीट आज़मा सकते हैं। यह कमांड लाइन उपकरण नहीं है लेकिन एक अच्छा मौका है कि वे xlsx का समर्थन करेंगे। www.libreoffice.org/features/calc/ देखें। यह xlsx समर्थन का उल्लेख करता है।


यदि आप जावा कमांड लाइन चलाने के लिए ठीक हैं तो आप इसे अपाचे पीओआई एचएसएसएफ के एक्सेल एक्सट्रैक्टर के साथ कर सकते हैं। इसमें एक main विधि है जो कमांड लाइन एक्स्ट्रैक्टर कहती है । ऐसा लगता है कि सबकुछ सिर्फ डंप हो गया है। वे इस उदाहरण को इंगित करते हैं जो सीएसवी में परिवर्तित हो जाता है । इसे चलाने से पहले आपको इसे संकलित करना होगा, लेकिन इसमें भी एक main विधि है ताकि आपको इसे काम करने के लिए प्रति कोडिंग करने की आवश्यकता न हो।

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


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

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

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

second_sheet.csv में my_file.xlsx में दूसरी शीट का डेटा होगा।


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

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

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


सुविधा के लिए एक छोटे से बैश रैपर के माध्यम से आर का उपयोग करने का एक और विकल्प होगा:

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

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

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

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

users ALL=(ALL) NOPASSWD: libreoffice

csvkit प्रयोग करें

in2csv data.xlsx > data.csv

विवरण के लिए उनके उत्कृष्ट docs जांच करें





xlsx