কমান্ড লাইনের সাথে লিনাক্সে xlsx কে সিএসভিতে রূপান্তর করুন


266

আমি xlsx ফাইলগুলিকে লিনাক্সের সিএসভি ফাইলগুলিতে রূপান্তর করার জন্য একটি উপায় খুঁজছি।

আমি পিএইচপি / পার্ল বা এর মতো কিছু ব্যবহার করতে চাই না যেহেতু আমি কয়েক মিলিয়ন লাইনের প্রসেসিংয়ে দেখছি, তাই আমার দ্রুত কিছু দরকার। আমি উবুন্টু রেপোতে xls2csv নামে একটি প্রোগ্রাম পেয়েছি তবে এটি কেবল xls (অফিস 2003) ফাইলগুলিতে রূপান্তর করবে (বর্তমানে আমি ব্যবহার করছি) তবে নতুন এক্সেল ফাইলগুলির জন্য আমার সমর্থন প্রয়োজন।

কোন ধারনা?


10
স্ক্রিপ্টিং ভাষার সাথে বাস্তবায়িত যে কোনও কিছুই প্রকৃতির দ্বারা ধীর হয়ে যাচ্ছে বলে মনে হচ্ছে ... কিছুটা বিভ্রান্ত হয়েছে, বিশেষত যেহেতু এই ভাষাগুলির আকর্ষণীয় পাঠাগারগুলিতে সি
চার্লস ডাফি

2
এক্সেল 65536 সারিতে সীমাবদ্ধ ছিল used এখন এটি 1,048,576 ( সাপোর্ট.মাইক্রোসফট.কম / কেবি/ 120596 )। এটিতে "কয়েক মিলিয়ন লাইন বিচ্ছিন্ন করতে" ফিট করা শক্ত হতে চলেছে। শুধু বলছি ...
পাভেল ভেলার

1
@ পাভেল বেশ কয়েকটি ফাইলের ওপরে থাকতে পারে।
চার্লস ডাফি

2
... ব্যক্তিগতভাবে, আমি পাইথন জন্য xlsv গ্রন্থাগার ব্যবহার করে এই করতে চাই, কিন্তু যেহেতু স্ক্রিপ্টিং ভিত্তিক পন্থা প্রশ্ন আউট হিসাবে বর্ণনা করছে ... অসহায়তা । (যদি প্রোগ্রামিং সরঞ্জামগুলি উত্তর থেকে বাদ দেওয়া হয় তবে এটি প্রোগ্রামিংয়ের প্রশ্ন কীভাবে হয়?)
চার্লস ডফি

1
@ চার্লসডুফি আমি বর্তমানে এটি করার জন্য একটি পিএইচপি লাইব্রেরি ব্যবহার করছি এবং এটি করতে xls2csv 1 সেকেন্ড লাগে, পিএইচপি করতে 10 মিনিট সময় নেয়। আক্ষরিক।
ব্যবহারকারী 1390150

উত্তর:


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"; doneLibreOffice পদ্ধতি সম্ভবত অন্যান্য ফর্ম্যাটগুলি প্রক্রিয়া করতে পারে, তবে আমি এটি কাজ করতে পারি না (এটি --headlessযুক্তি দিয়েও খালি ফাইলটি প্রতিবার খালি খুলবে )।
sleblanc

6
@sebleblanc- তেমন ঝামেলা-মুক্ত নয়। নির্ভরতা সংখ্যার ভিত্তিতে ইনস্টলেশনটি একটি ব্যথা ((যদি আপনি এটি কোনও শিরোনামহীন সার্ভারে করেন)। এখনও অবধি জিসিসি, ইন্টল্টোল, জ্লিব-ডেভেল, জিটিকে ... জিটিকে গ্লিব, এটক, পাঙ্গো, কায়রো, কায়রো-অবজেক্ট, জিডিকে-পিক্সুফ -২.০ ...
অ্যান্ড্রুটবার

11
আমি এটি দিয়ে একটি হেডলেস ডেবিয়ান সার্ভারে ইনস্টল করতে সক্ষম হয়েছি apt-get install gnumeric --no-install-recommends। একমাত্র ত্রুটি এটি হ'ল প্রচুর সতর্কতা জিনকফ-সতর্কতা **: ক্লায়েন্ট চলমান অবস্থায় D-BUS ডেমনের সাথে সংযোগ করতে ব্যর্থ হয়েছিল । একটি সহজ ssconvert oldfile.xlsx newfile.csv > /dev/null 2>&1কৌশলটি করবে।
বেনিয়ামিন ডেলিচির

7
সিএসভিতে লিখতে আপনি -Sপতাকাটি একাধিক পত্রক লিখতে চাইতে পারেন । প্রত্যেকে তার নিজস্ব ফাইলে যায়।
এড অ্যাভিস

5
@hhh বিভাজক বিকল্পটি কেবলমাত্র txt রফতানির সাথে কাজ করে। আপনি stdout- এ প্রিন্ট করতে এই ব্যবহার করতে পারেন: ssconvert -O "separator=;" -T Gnumeric_stf:stf_assistant file.xlsx fd://1
এক্সিক

135

আপনি LibreOffice দিয়ে এটি করতে পারেন:

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

আমার কাছে পরিষ্কার না হওয়ার কারণে আপনার এটিকে sudo দিয়ে চালানোর দরকার হতে পারে। আপনি sudoers ফাইলটিতে এই লাইনটি যুক্ত করে পাসওয়ার্ডের প্রয়োজন ছাড়াই আপনি LibreOffice কে sudo দিয়ে কাজ করতে পারেন:

users ALL=(ALL) NOPASSWD: libreoffice

35
আমি কীভাবে লাইব্রোফিসকে বলব যে আমি দ্বিতীয় শীট চাই?
dmeu

30
পাসওয়ার্ড ছাড়াই সবার জন্য ফ্রিডোফিসিতে অনুমতি দেওয়ার ফলে কৃমির একটি ক্যান খোলা হচ্ছে। একাধিক ব্যবহারকারীর প্ল্যাটফর্মে রুট অনুমতি অর্জনের সম্ভাবনা সহ ফলাফলগুলি সম্পর্কে সতর্ক থাকুন
ইন্টারার্টিকাল

5
এটি আমার জন্য কাজ করেছে (সূডোর প্রয়োজন নেই)। আমার সংস্করণ: libreoffice-calc-3.6.7.2-4.fc18.x86_64
ব্র্যাড হেইন

5
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv $filenameআমার জন্য ওএস এক্সে কাজ করেছেন।
নুবু

12
অ-এসিআই অক্ষর সংরক্ষণ করে utf-8 এ রূপান্তর করতে পরিবর্তে ব্যবহার করুন --convert-to "csv:Text - txt - csv (StarCalc):44,34,76,1,1/1"। বিশদ জন্য ওপেন অফিস উইকি দেখুন ।
আরেহ লাইব বৃষ

132

আপনার যদি ইতিমধ্যে কোনও ডেস্কটপ পরিবেশ থাকে তবে আমি নিশ্চিত যে জিনুমুরিক / লিব্রেঅফিস ভালভাবে কাজ করবে তবে একটি হেডলেস সার্ভারে (যেমন অ্যামাজন ওয়েব সার্ভিসেস), তাদের কয়েক ডজন নির্ভরতা প্রয়োজন যা আপনারও ইনস্টল করা দরকার।

আমি পাইথনের এই বিকল্পটি পেয়েছি:

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
ব্যবহারকারী2105469

2
.... আমার জন্য মহান কাজ এবং স্বতন্ত্র -s বিকল্প ব্যবহার করে ফাইলগুলি প্রতিটি শীট আহরণ অনুমতি ছিল - যেখানে LibreOffice শীট মাপ পরিচালনা করতে সক্ষম হন নি, xlsx2csv কোন সমস্যা ছিল
সোরেন

ধন্যবাদ! উবুন্টুতে খুব সুবিধাজনক।
zhuguowei

5
ডেবিয়ান এবং উবুন্টুতে xlsx2csvপ্যাকেজ রয়েছে, সুতরাং আপনাকে এটি ম্যানুয়ালি ইনস্টল করার দরকার নেই easy_installতবে আপনার প্যাকেজ ম্যানেজারটি ব্যবহার করতে পারেন।
জোশ

ম্যাকওএসে আপনার প্রয়োজন হবেsudo easy_install xlsx2csv
ফ্র্যাঙ্ক হিন্টস

32

ব্যাশে, আমি আমার লাইব্রোফাইস কমান্ডটি আমার সমস্ত এক্সএলএসএক্স ফাইলকে বর্তমান ডিরেক্টরিতে রূপান্তর করতে ব্যবহার করেছি:

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

এটি ফাইলের নামের জায়গাগুলির যত্ন নেয়।

কয়েক বছর পরে আবার চেষ্টা করেছি, এবং এটি কার্যকর হয়নি। এই থ্রেডটি কিছু টিপস দেয় তবে দ্রুত সমাধানটি রুট হিসাবে চালানো (বা এ চালানো sudo libreoffice) ছিল। মার্জিত নয়, তবে দ্রুত।

উইন্ডোজে scalc.exe কমান্ডটি ব্যবহার করুন


13
এটি চেষ্টা করার আগে আপনি সমস্ত ওপেন অফিসের উইন্ডোজ বন্ধ করে রেখেছেন তা নিশ্চিত করুন, কারণ এটি নিঃশব্দে অন্যথায় ব্যর্থ হবে।
টাকোন

এছাড়াও, উইন্ডোজে, কমান্ডটি scalc.exeবরং হয় libreoffice। বর্তমান স্থিতিশীল এলও সংস্করণে আজ আমার জন্য কাজ করেছেন।
অ্যারোনভানআম্মার্স


8

আর একটি বিকল্প হ'ল সুবিধার জন্য একটি ছোট ব্যাশ মোড়কের মাধ্যমে আর ব্যবহার করা:

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' কমান্ডের উপরে কেবল 65৫৫36 lines লাইন রূপান্তর করা হয়েছে তবে আমার একাধিক লাইনের অভাব রয়েছে, আপনি কি আমাকে সাহায্য করতে পারবেন?
কার্ত্তিককুমার নাগরাজ

4

আপনি যদি জাভা কমান্ড লাইনটি চালানোর জন্য ঠিক থাকেন তবে আপনি এটি অ্যাপাচি পিওআই এইচএসএসএফের এক্সেল এক্সট্র্যাক্টর দিয়ে করতে পারেন । এটির একটি mainপদ্ধতি রয়েছে যা কমান্ড লাইন নিষ্কর্ষক বলে । এটি মনে হয় কেবল সবকিছু ফেলে দেয়। তারা এই উদাহরণটি নির্দেশ করে যা সিএসভিতে রূপান্তর করে । এটি চালানোর আগে আপনাকে এটি সঙ্কলন করতে হবে তবে এটিরও একটি mainপদ্ধতি রয়েছে যাতে এটি কাজ করতে আপনাকে প্রতি সেডের বেশি কোডিং করতে হবে না।

অপর একটি বিকল্প যা উড়ে যেতে পারে তবে অন্য প্রান্তে কিছুটা কাজের প্রয়োজন হবে তা হ'ল আপনার এক্সেল ফাইলগুলি আপনার কাছে এক্সেল এক্সএমএল ডেটা বা এমএস আজকের ফর্ম্যাটটির যে কোনও নামেই এক্সএমএল স্প্রেডশিট হিসাবে আসে । এটি আপনার পছন্দমতো টুকরো টুকরো করে কাটানোর জন্য পুরো সুযোগের নতুন এক বিশ্বকে উন্মুক্ত করবে।


1
আপনি কি জানেন যে এটি .xlsx সমর্থন করে?
ডিম্রোক

1

অন্যরা যেমন বলেছে, libreofficeএক্সএলএস ফাইলগুলিকে সিএসভিতে রূপান্তর করতে পারে। আমার জন্য সমস্যাটি ছিল শীট নির্বাচন।

এই লাইব্রোফাইস পাইথন স্ক্রিপ্টটি একটি একক শীটকে সিএসভিতে রূপান্তর করতে দুর্দান্ত কাজ করে।

ব্যবহার হ'ল:

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

একমাত্র ডাউনসাইড (আমার শেষের দিকে) এটি --headlessকাজ করছে বলে মনে হয় না। আমার একটি এলও উইন্ডো রয়েছে যা এক সেকেন্ডের জন্য প্রদর্শিত হয় এবং তারপরে প্রস্থান করে।
আমার সাথে এটি ঠিক আছে, এটি একমাত্র সরঞ্জাম যা কাজটি দ্রুত করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.