2010-07-22 7 views
13

मैं रूबी के साथ एक एक्सेल स्प्रेडशीट फ़ाइल पढ़ने की कोशिश कर रहा हूं, लेकिन यह फ़ाइल की सामग्री को पढ़ नहीं रहा है।रूबी का उपयोग करके एक्सेल स्प्रेडशीट की सामग्री को मैं कैसे पढ़ूं?

[DEPRECATED] By requiring 'parseexcel', 'parseexcel/parseexcel' and/or 
      'parseexcel/parser' you are loading a Compatibility layer which 
      provides a drop-in replacement for the ParseExcel library. This 
      code makes the reading of Spreadsheet documents less efficient and 
      will be removed in Spreadsheet version 1.0.0 

#<Spreadsheet::Excel::Row:0xffffffdbc3e0d2 @worksheet=#<Spreadsheet::Excel::Worksheet:0xb79b8fe0> @outline_level=0 @idx=0 @hidden=false @height= @default_format= @formats= []> 
#<Spreadsheet::Format:0xb79bc8ac> 
nil 

मैं फ़ाइल की वास्तविक सामग्री प्राप्त करने की आवश्यकता:

यह यह मुझे दे रहा है निम्नलिखित मेरी स्क्रिप्ट

book = Spreadsheet.open 'myexcel.xls'; 
sheet1 = book.worksheet 0 
sheet1.each do |row| 
    puts row.inspect ; 
    puts row.format 2; 
    puts row[1]; 
    exit; 
end 

है। मैं क्या गलत कर रहा हूं?

+0

आप लग रहे नए कोड लिखने जा करने के लिए, तो मैं चेतावनी के बाद और के रूप में इंगित 'ParseExcel' लाइब्रेरी का उपयोग कर सुझाव देना चाहेंगे। ऐसा नहीं है कि मैंने कभी भी उनमें से किसी एक का उपयोग किया है, लेकिन बहिष्कृत कार्यक्षमता पर नई चीजें बनाना मेरे लिए एक बुरा विचार है। –

+0

क्यों यह सामग्री प्रदर्शित नहीं कर रहा है। – Pavunkumar

उत्तर

20

यह row तरह लग रहा है, जिसका वर्ग Spreadsheet::Excel::Row है प्रभावी रूप से एक एक्सेल Range है और यह या तो Enumerable शामिल या कम से कम उदाहरण के लिए, कुछ गणनीय व्यवहार, #each को उजागर करता है।

तो तुम इस तरह अपनी स्क्रिप्ट कुछ पुनर्लेखन सकता है:

require 'spreadsheet'  
book = Spreadsheet.open('myexcel.xls') 
sheet1 = book.worksheet('Sheet1') # can use an index or worksheet name 
sheet1.each do |row| 
    break if row[0].nil? # if first cell empty 
    puts row.join(',') # looks like it calls "to_s" on each cell's Value 
end 

ध्यान दें कि मैं तर्क parenthesised कर दिया है, जो आम तौर पर सलाह दी जाती इन दिनों है, और हटाया अर्द्ध कोलन, जो जब तक आप आवश्यक नहीं हैं ' एक पंक्ति पर एकाधिक कथन लिख रहे हैं (जो आपको शायद ही कभी - अगर कभी करना चाहिए)।

यह शायद एक बड़ा स्क्रिप्ट से एक हैंगओवर है, लेकिन मैं कोड में यह देखते हुए कि book और sheet1 चर वास्तव में आवश्यक नहीं हैं आपको बताएंगे, और कहा कि Spreadsheet#open एक ब्लॉक लगता है, इसलिए एक और अधिक मुहावरेदार रूबी संस्करण हो सकता है कुछ इस तरह:

require 'spreadsheet'  
Spreadsheet.open('MyTestSheet.xls') do |book| 
    book.worksheet('Sheet1').each do |row| 
    break if row[0].nil? 
    puts row.join(',') 
    end 
end 
+0

क्या आप मुझे बता सकते हैं कि एक्सेल शीट की पंक्तियों की संख्या कैसे गिनती है। – khan

0

क्या यह एक लाइन फ़ाइल है? आप की जरूरत है ताकि:

puts row[0]; 
+0

यह 1000 लाइन फ़ाइल है ... मैं बस पहले रिकॉर्ड की जांच कर रहा हूं .... – Pavunkumar

4

मैं तुम्हें parseexcel की आवश्यकता की जरूरत नहीं लगता है, बस require 'spreadsheet'

आप पढ़ सकते हैं guide है, यह सुपर आसान का पालन है।

+0

लिंक काम नहीं करता है। –

+1

मैंने गिटहब पर इंगित करने के लिए लिंक अपडेट किया। ऐसा लगता है कि इस समय rubyforge नीचे है –

संबंधित मुद्दे