使用ruby gem“creek”解析excel

时间:2017-06-19 21:22:54

标签: ruby excel

嘿伙计,所以我试图通过ruby gem“creek”解析excel文件,它准确地解析行但我想只检索列,例如只有“A”cloumn中的数据。正确输出整个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

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:3)

Creek无法轻松提取列信息,因为它将列和行存储在一个字符串哈希键中。

更受欢迎的the source允许您执行sheet.column(1)之类的操作并获取整个列。非常简单。

如果你绝对必须拥有小溪,我注意到有一个名为Roo的小溪附加组件,它增加了一些列提取能力。例如:

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

最后,如果您想使用Creek并且没有附加组件,请使用Hash#select:

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

答案 1 :(得分:0)

要阅读各个列,可以使用Creek :: Sheet#simple_rows方法

例如,要阅读第一和第三列:

require 'creek'
creek = Creek::Book.new 'Final.xlsx'
sheet_first = creek.sheets.first

# read first column A
col_first = sheet_first.simple_rows.map{|col| col['A']} #=> Array containing the first column

# read third column C
col_third = sheet_first.simple_rows.map{|col| col['C']} #=> Array containing the third column