2017-06-19 83 views
0

嘿家伙,所以我想通过一个excel文件解析通过ruby gem“creek”,它精确地解析这些行,但是我想只检索列,例如数据在“A”层。正确输出整个excel文件。使用红宝石gem“creek”解析excel

require 'creek' 
creek = Creek::Book.new 'Final.xlsx' 
sheet= creek.sheets[0] 

sheet.rows.each do |row| 
    puts row # => {"A1"=>"Content 1", "B1"=>nil, C1"=>nil, "D1"=>"Content 3"} 
end 

任何建议将不胜感激。

+0

难道你用小河的要求?它看起来并没有为获得列而优化,它会有点混乱。它针对流解析大文件进行了优化。 –

+0

可以推荐像“roo”这样的另一个解析宝石。我很难理解如何使用解析excel的宝石。谢谢 – KoushKilla

回答

3

Creek不便于提取列信息,因为它将列和行一起存储在一个字符串散列键中。

更受欢迎的Roo允许您执行诸如sheet.column(1)之类的操作并获得整个专栏。很简单。

如果你绝对必须有小溪,我注意到有一个名为Ditch的小河的附加功能,它增加了一些列取出功能。例如:

sheet.rows.each { |r| 
    puts "#{r.index} #{r.get('A')} - #{r.get('B')}" 
    } 

最后,如果你想与溪和无加载项做到这一点,利用哈希#选择:

sheet.rows.each do |row| 
    puts row.select{ |k,v| ["A", "B"].include? k[0]} 
end 
+0

谢谢。如果我想检索列值而不是列标签ie。 A,B等,我将如何调整你最后的做法。 – ultrasamad

+1

@ultrasamad要使用'Ditch'获取值,请使用'row.lookup('key')'。在Creek中,每一行都是散列,所以你可以使用'Hash#values'非常感谢 –

+0

。它真的为我节省了很多。 – ultrasamad