अर्धवृत्त अलग क्षेत्रों के साथ कमांड लाइन पर .xvx (MS Excel) फ़ाइल को .csv में बदलें


31

मुझे लगता है कि यह है नहीं एक पूरी तरह से यूनिक्स / लिनक्स संबंधित सवाल। लेकिन चूंकि यह कुछ ऐसा है जो मैं लिनक्स पर करूंगा, मुझे उम्मीद है कि किसी के पास इसका जवाब होगा।

मेरे पास एक ऑनलाइन एक्सेल फ़ाइल है ( .xlsx) जो समय-समय पर (किसी और द्वारा) अपडेट की जाती है। मैं एक स्क्रिप्ट लिखना चाहता हूं और उस एक्सेल शीट को प्रोसेस करने के लिए एक क्रोनजोब के रूप में डालता हूं। लेकिन ऐसा करने के लिए, मुझे उस पाठ फ़ाइल (इसलिए .csv) को अर्धविराम से अलग किए गए कॉलम में बदलना होगा । यह दुर्भाग्य से अलग नहीं किया जा सकता क्योंकि कुछ स्तंभों में कॉमा हैं। क्या शेल से यह रूपांतरण करना संभव है? मेरे पास ओपन ऑफिस स्थापित है और मैं इसके जीयूआई का उपयोग करके ऐसा कर सकता हूं, लेकिन यह जानना चाहता हूं कि क्या कमांड लाइन से ऐसा करना संभव है। धन्यवाद!

पुनश्च: मैं एक मैक मशीन के रूप में अच्छी तरह से है, इसलिए अगर कुछ समाधान वहाँ काम कर सकते हैं, साथ ही अच्छा है। :)

जवाबों:


21

OpenOffice कमांड लाइन पर प्रारूप रूपांतरण करने के लिए unoconv प्रोग्राम के साथ आता है ।

unoconv -f csv filename.xlsx

अधिक जटिल आवश्यकताओं के लिए, आप XLSX फ़ाइलों को Spreadsheet::XLSXपर्ल के साथ या openpyxlपायथन में पार्स कर सकते हैं । उदाहरण के लिए, अर्धविराम से अलग CSV फ़ाइल (चेतावनी: अप्रकाशित, सीधे ब्राउज़र में टाइप की गई) के रूप में कार्यपत्रक का प्रिंट आउट करने के लिए यहां एक क्विक स्क्रिप्ट है:

perl -MSpreadsheet::XLSX -e '
    $\ = "\n"; $, = ";";
    my $workbook = Spreadsheet::XLSX->new()->parse($ARGV[0]);
    my $worksheet = ($workbook->worksheets())[0];
    my ($row_min, $row_max) = $worksheet->row_range();
    my ($col_min, $col_max) = $worksheet->col_range();
    for my $row ($row_min..$row_max) {
        print map {$worksheet->get_cell($row,$_)->value()} ($col_min..$col_max);
    }
' filename.xlsx >filename.csv

unoconv मेरे OO के साथ नहीं आया था, लेकिन मैंने इसे स्थापित किया और यह बहुत अच्छा काम करता है (कॉमा से अलग की गई फ़ाइल में कनवर्ट करता है, अर्धविराम हालांकि नहीं)! धन्यवाद! मुझे अभी भी यह पता लगाने की आवश्यकता है कि मुझे अपने क्षेत्र कैसे मिलेंगे जिनमें अल्पविराम शामिल हैं। लेकिन धन्यवाद वैसे भी।
9

@allrite ओह, मैं विभाजक के रूप में अर्धविराम की आवश्यकता को याद किया था। पायथन या पर्ल में प्रसंस्करण करने का मेरा सुझाव अभी भी खड़ा है। लेकिन मैंने ;विभाजक के रूप में सीएसवी में परिवर्तित होने के लिए एक स्क्रिप्ट (अनटाइटेड) भी जोड़ा है ।
गिल्स एसओ- बुराई को रोकें '

धन्यवाद! मैंने स्प्रेडशीट :: XLSX का उपयोग किया, लेकिन आपके द्वारा प्रदान की गई CPAN लिंक में कोड का उपयोग किया। यह काम करता है :)
allrite

1
एक अनाम उपयोगकर्ता इस के साथ समस्या नहीं थी
माइकल Mrozek

9

https://github.com/dilshod/xlsx2csv

मेरे लिए अच्छा काम किया। लगभग 85 एमबी XLSX फ़ाइल मैक बुक प्रो एसएसडी पर लगभग 3 मिनट में परिवर्तित हुई।


1
OSX में अच्छी तरह से काम करने से अच्छी तरह से $ python xlsx2csv.py -d ";" my.xlsx my.csvकाम किया और अपराधी को परिभाषित करने की क्षमता, धन्यवाद +!
hhh

6

मैं फ़ाइलों को परिवर्तित करने के लिए पर्ल के xls2csv का उपयोग कर रहा हूं ।xlscsv

यकीन नहीं है कि अगर यह xlsxभी साथ काम करता है।

के बारे में:

यह दुर्भाग्य से अलग नहीं किया जा सकता क्योंकि कुछ स्तंभों में अल्पविराम हैं

इसीलिए उद्धृत किया गया है:

1,2,"data,data, more data"

टिप के लिए धन्यवाद, मैं कोशिश करूंगा कि। मैं अभी भी अर्धविराम को अलग करना पसंद करता हूं, चूंकि csv रूपांतरण के बाद, फ़ाइल awkस्क्रिप्ट के माध्यम से जाती है । और इसके क्षेत्र में विभाजक के रूप में अर्धविराम पास करना आसान है awk। मैं कोट के अंदर हो अल्पविराम के लिए देखो उन्हें कुछ और के साथ बदलने के लिए कर सकते हैं ... अब है कि एक और सवाल :) है
allrite

धन्यवाद @neurino। मैंने इसके बजाय गिल्स विधि का उपयोग किया, लेकिन उत्तर वैसे भी धन्यवाद।
allrite

1

मैं PHP का उपयोग करता हूं। बस http://phpexcel.codeplex.com/ से PHPExel लाइब्रेरी को इंस्टाल करें और शायद आपको XML फ़ंक्शन की भी आवश्यकता है।

यह मेरा कोड है:

<?php

error_reporting(E_ALL);
date_default_timezone_set('Europe/London');

/** PHPExcel_IOFactory */

require_once '/home/markov/Downloads/1.7.6/Classes/PHPExcel/IOFactory.php';

$file="RIF394305.xlsx"; //PATH TO CSV FILE

// Check prerequisites

if (!file_exists($file)) {
    exit("Please run 06largescale.php first.\n");
}

$objReader = PHPExcel_IOFactory::createReader('Excel2003XML');

$objPHPExcel = $objReader->load($file);

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');

$objWriter->save(str_replace('.xlsx', '.csv',$file));
?>

आप प्रक्रिया को वापस कर सकते हैं या विभिन्न एक्सेल / सीएसवी प्रारूप का उपयोग कर सकते हैं। PHPExcel निर्देशिका में अलग-अलग php फ़ाइलों को देखें।

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