2010-07-22 13 views
13

Bir Excel elektronik tablo dosyasını Ruby ile okumaya çalışıyorum, ancak dosyanın içeriğini okuyor.Ruby kullanarak bir Excel elektronik tablosunun içeriğini nasıl okurum?

[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 

dosyanın gerçek içeriği almak gerekir:

Bu

Aşağıdaki beni veriyor benim senaryom

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 

olduğunu. Neyi yanlış yapıyorum?

+0

Yeni kod yazıyor gibi görünüyorsanız, uyarıyı takip etmeyi ve 'ParseExcel' kitaplığını belirtildiği gibi kullanmanızı öneririm. Onlardan hiç birini kullanmadım, ancak kullanımdan kaldırılan işlevsellik üzerine yeni şeyler inşa etmek benim için kötü bir fikir gibi görünüyor. –

+0

neden içeriği göstermiyor. – Pavunkumar

cevap

20

Bu kimin sınıf Spreadsheet::Excel::Row olan etkin bir Excel Range olup, Enumerable içerir ya da en azından örneğin, bazı enumerable davranışları #each açığa Ya bunu row benziyor. Çünkü argümanları parenthesised ettik

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 

Not, bugünlerde genellikle tavsiye edilir, ve sürece gerekli değildir noktalı virgül kaldırıldı:

Yani bunun gibi komut şey yeniden olabilir Bir satırda birden fazla ifade yazınız (nadiren - eğer yapmalısınız -).

Muhtemelen daha büyük bir komut dosyasından bir kalıntı, ama kodda book ve sheet1 değişkenler gerçekten gerekli değildir verilen işaret edeceğiz ve Spreadsheet#open bir blok sürdüğünü, bu nedenle daha deyimsel Yakut versiyonu olabilir Bunun gibi bir şey:

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

numaralı telefondan bir excel sayfasının satır sayısını nasıl sayabileceğimi söyleyebilir. – khan

0

Tek satırlı dosya mı? İhtiyacınız Eğer öyleyse:

puts row[0]; 
+0

1000 satırlık dosya ... Sadece ilk kaydı kontrol ediyorum .... – Pavunkumar

4

Ben takip etmek süper kolay, sadece require 'spreadsheet'

Eğer guide okudunuz, sen ParseExcel gerektirecek gerek sanmıyorum.

+0

Link çalışmıyor. –

+1

Bağlantıyı GitHub'da işaret edecek şekilde güncelledim. Görünüşe göre rubyforge şu an –

İlgili konular