2009-08-07 14 views
6

क्या एक्सेल स्प्रेडशीट फ़ाइल को CSV में परिवर्तित करने के लिए कुछ सामान्य यूनिक्स स्क्रिप्टिंग भाषा (पर्ल/पायथन/रूबी) या कमांड लाइन उपयोगिता का उपयोग करके कोई आसान तरीका है? विशेष रूप से, यह एक:एक्सेल स्प्रेडशीट से डेटा प्रोग्रामेटिक रूप से निकालें

http://www.econ.yale.edu/~shiller/data/ie_data.xls

और विशेष रूप से है कि स्प्रेडशीट (पहले दो चार्ट जा रहा है) के तीसरे चादर।

+0

यहाँ एक लाइनर वर्णन हैं जो उपयोगी हो सकता है के साथ कुछ अजगर संकुल का एक अच्छा संकलन है: //www.python-excel.org/ – Aalok

उत्तर

1

मैं एक स्वीकार्य जवाब पहले से ही पाया है हो सकता है:

xls2csv

लेकिन रुचि क्या अन्य विकल्प नहीं है सुनने के लिए, या अन्य भाषाओं में उपकरणों के बारे में।

8

शायद xlrd (अजगर में)

संपादित काम करेगा: मैं वास्तव में सवाल पढ़ने के लिए सीखना चाहिए। लेकिन सीएसवी लिखना एक बड़ी समस्या नहीं होनी चाहिए ताकि आप वास्तव में इसका उपयोग कर सकें।

+0

+1: xlrd अद्भुत काम करता है। –

+0

ठीक है, सीएसवी के रूप में outputting कोई बड़ा सौदा नहीं है। धन्यवाद! – dreeves

1

पायथन के लिए, कई विकल्प हैं, here, here और here देखें। ध्यान दें कि अंतिम विकल्प केवल एक्सेल के साथ विंडोज़ पर काम करेगा।

+3

pyXLreader 2005 के बाद से बनाए रखा नहीं प्रतीत होता है, स्रोतफोर्ज ट्रैकर में एक आश्चर्यजनक बकाया बग है (अंशों को छोड़ देता है, सभी संख्याओं को पूर्णांक के रूप में प्रस्तुत किया जाता है) और कुछ और समस्याएं जो मुझे इसके कुछ मिनटों में मिलती हैं (बड़े पैमाने पर दुर्घटनाएं फाइलें, कभी-कभी "FCUKDATE" प्रिंट करती हैं (कोई मजाक नहीं!) जब डेटा में तिथियां होती हैं, तो समय लिया जाता है xlrd का कम से कम 6 गुना होता है और संभवतः ओ (एन ** 2) होता है, स्मृति का उपयोग कम से कम 7 गुना होता है xlrd)। क्या आप इसे अपने आप बहुत अधिक उपयोग करते हैं? –

+0

नहीं। मैंने संक्षेप में xlrd का उपयोग किया है, लेकिन मैं डेटा को CSV के रूप में संग्रहीत करता हूं और उससे काम करता हूं। मैंने उन तीन वेबसाइटों की एक बुकमार्क समीक्षा की थी, इसलिए मैंने सोचा कि यह उपयोगी हो सकता है। – DrAl

+1

एक समीक्षा? मुझे Google का उपयोग करके ऐसी कोई चीज़ नहीं मिल सका। कृपया लिंक पोस्ट करें। –

14

xls पढ़ने के लिए वास्तव में एक अच्छा पर्ल लाइब्रेरी है: Spreadsheet::ParseExcel

+0

+1 कई साल पहले यह खुद इस्तेमाल किया गया; यह निश्चित रूप से काम पूरा हो गया। – BlairHippo

1

विकल्प सभी तीन भाषाओं के लिए मौजूद हैं। सवाल यह है कि - आप किससे सबसे परिचित हैं। यह वह भाषा है जिसका आप उपयोग करना चाहिए, निश्चित रूप से। और यदि आप या तो परिचित नहीं हैं, तो यह एप्लिकेशन वास्तव में भाषाओं के बीच चयन का एक बड़ा उदाहरण नहीं है।

राय पी।: यदि आप किसी भी भाषा को नहीं जानते हैं, तो बस पायथन सीखें और xlrd का उपयोग करें।

+0

ओह, मेरा मतलब यह भाषा युद्ध प्रश्न या कुछ भी नहीं था। उस कार्य को पूरा करने के लिए बस जरूरी था और जो भी भाषा ने इसे आसान बना दिया, उसका उपयोग करने में प्रसन्नता हुई। – dreeves

4

आप पाइथन में pyexcelerator का उपयोग कर सकते हैं।

इस कोड (xls2csv.py रूप pyexcelerator की examples फ़ोल्डर में शामिल है) स्प्रेडशीट से सभी पत्रक निकालता है और उन्हें stdout सीएसवी के रूप में करने के लिए आउटपुट।

आप जो भी चाहते हैं उसे करने के लिए कोड को आसानी से बदल सकते हैं।

pyexcelerator के बारे में अच्छी बात यह है कि आप इसे पर भी उपयोग कर सकते हैं एक्सेल एक्सएलएस फाइलों को एक्सेल इंस्टॉल किए बिना लिख ​​सकते हैं।

#!/usr/bin/env python 
# -*- coding: windows-1251 -*- 
# Copyright (C) 2005 Kiseliov Roman 

__rev_id__ = """$Id: xls2csv.py,v 1.1 2005/05/19 09:27:42 rvk Exp $""" 


from pyExcelerator import * 
import sys 

me, args = sys.argv[0], sys.argv[1:] 


if args: 
    for arg in args: 
     print >>sys.stderr, 'extracting data from', arg 
     for sheet_name, values in parse_xls(arg, 'cp1251'): # parse_xls(arg) -- default encoding 
      matrix = [[]] 
      print 'Sheet = "%s"' % sheet_name.encode('cp866', 'backslashreplace') 
      print '----------------' 
      for row_idx, col_idx in sorted(values.keys()): 
       v = values[(row_idx, col_idx)] 
       if isinstance(v, unicode): 
        v = v.encode('cp866', 'backslashreplace') 
       else: 
        v = str(v) 
       last_row, last_col = len(matrix), len(matrix[-1]) 
       while last_row < row_idx: 
        matrix.extend([[]]) 
        last_row = len(matrix) 

       while last_col < col_idx: 
        matrix[-1].extend(['']) 
        last_col = len(matrix[-1]) 

       matrix[-1].extend([v]) 

      for row in matrix: 
       csv_row = ','.join(row) 
       print csv_row 

else: 
    print 'usage: %s (inputfile)+' % me 
+1

वहां 'cp1251' और 'cp866' क्या कर रहे हैं? डेटा में तिथियां होने पर क्या होगा? यह alist.extend ([कुछ]) का उपयोग alist.append (कुछ) के बजाय क्यों करता है? यह ',' का उपयोग क्यों करता है। सीएसवी मॉड्यूल का उपयोग करने के बजाय (पंक्ति) में शामिल हों ?? क्या आप गंभीर हैं??? –

+1

@ जॉन: मैंने अभी pyexcelerator का उदाहरण कॉपी किया है। मुझे लगता है कि उदाहरण का बिंदु xls फ़ाइल पढ़ रहा है, सीएसवी पीढ़ी का हिस्सा नहीं। यह काम करता हैं। आप इसे आवश्यकतानुसार संशोधित और सुधार सकते हैं। – nosklo

+2

@nosklo: यदि ** आपके डेटा में तिथियां हैं तो यह ** ** काम नहीं करती है। आमतौर पर xls फ़ाइलों को लिखने के लिए pyExcelerator का उपयोग करना ** uncool ** है। यह नियमित रूप से बनाए रखा नहीं जा रहा है। ईस्टर 200 9 के आसपास संक्षिप्त रखरखाव पुनरुत्थान से पहले विज्ञप्ति में बग हैं। Xls फ़ाइलों को लिखने के लिए xlwt (एक बनाए रखा कांटा) का उपयोग करें। Xls फ़ाइलों को पढ़ने के लिए xlrd का प्रयोग करें। देखें 'http: // www.python-excel.org' –

2

रूबी में, यहाँ कोड मैं का उपयोग करें: (की आवश्यकता है उत्कृष्ट parseexcel मणि) 'parseexcel'

def excelGetSheet(worksheet) 
    sheet=Array.new 
    worksheet.each { |row| 
     if row != nil # empty row? 
     cells=Array.new 
     j=0 
     row.each { |cell| 
      cells << cell.to_s('latin1') unless cell == nil 
      j=j+1 
     } 
     sheet << cells 
     end 
    } 
    return sheet 
end 

workbook = Spreadsheet::ParseExcel.parse("MyExcelFile.xls") 
sheet1 = excelGetSheet(workbook.worksheet(0)) 

puts sheet1.inspect 
+0

और स्पष्टीकरण यहां भी पाए गए हैं: http://www.codeweblog.com/parseexcel-ruby-used-to-read-excel/ – poseid

4
माणिक के लिए

की आवश्यकता होती है, स्प्रेडशीट मणि, संशोधित बारे में पढ़ने के लिए उत्कृष्ट है। ..उत्कृष्टता फ़ाइलें

https://github.com/zdavatz/spreadsheet

3

यह खेल के लिए काफी देर हो चुकी है, लेकिन मैंने सोचा कि मैं मणि का उपयोग कर "रू" रूबी के माध्यम से एक और विकल्प जोड़ेंगे:

 
    require 'rubygems' 
    require 'roo' 

    my_excel_file = Excelx.new("path/to/my_excel_file.xlsx") 
    my_excel_file.default_sheet = my_excel_file.sheets[2] 
    my_excel_file.to_csv("path/to/my_excel_file.csv") 
+1

और तीसरा कैसे चुनें चादर? – Alfabravo

+1

आह उचित बिंदु। "To_csv" पंक्ति से पहले, डिफ़ॉल्ट शीट को तीसरी शीट पर सेट करें, यानी my_excel_file.default_sheet = my_excel_file.sheets [2] – vikjam

1

pyexcel पुस्तकालय के साथ, आप कर सकते हैं ऐसा करते हैं:

>>> import pyexcel as p 
>>> data_sheet=p.get_sheet(file_name='/Users/jaska/Downloads/ie_data.xls', sheet_name='Data') 
>>> data_sheet.top_left() 
pyexcel sheet: 
+---------------------------------------------------------------------------------------------------------+---+---+---+------------+---+---+---+---+---+------------+---+---+---+---+---+---+ 
|                           | | | |   | | | | | |   | | | | | | | 
+---------------------------------------------------------------------------------------------------------+---+---+---+------------+---+---+---+---+---+------------+---+---+---+---+---+---+ 
| Stock Market Data Used in "Irrational Exuberance" Princeton University Press, 2000, 2005, 2015, updated | | | |   | | | | | | Cyclically | | | | | | | 
+---------------------------------------------------------------------------------------------------------+---+---+---+------------+---+---+---+---+---+------------+---+---+---+---+---+---+ 
| Robert J. Shiller                      | | | |   | | | | | | Adjusted | | | | | | | 
+---------------------------------------------------------------------------------------------------------+---+---+---+------------+---+---+---+---+---+------------+---+---+---+---+---+---+ 
|                           | | | |   | | | | | | Price  | | | | | | | 
+---------------------------------------------------------------------------------------------------------+---+---+---+------------+---+---+---+---+---+------------+---+---+---+---+---+---+ 
|                           | | | | Consumer | | | | | | Earnings | | | | | | | 
+---------------------------------------------------------------------------------------------------------+---+---+---+------------+---+---+---+---+---+------------+---+---+---+---+---+---+ 
>>> data_sheet.save_as('ie_data.csv') 

और यह काम करने के लिए, आप स्थापित करने की आवश्यकता:

$ pip install pyexcel 
$ pip install pyexcel-xls 

इतना ही नहीं, आप इसके अलावा में pyexcel-cli स्थापित करने और एक कमांड लाइन में अपने csv डेटा प्राप्त कर सकते हैं: http:

$ pyexcel transcode --sheet-name 'Data' /your/home/Downloads/ie_data.xls ie_data.csv 
संबंधित मुद्दे