【问题标题】:Parsing through excel using ruby gem "creek"使用 ruby​​ gem "creek" 通过 excel 解析
【发布时间】:2017-06-19 21:22:54
【问题描述】:

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

任何建议将不胜感激。

【问题讨论】:

  • 您是否需要使用 Creek?它似乎没有针对获取列进行优化,它会有点混乱。它针对流解析大文件进行了优化。
  • 可以推荐另一个解析 gem,比如“roo”。我很难理解如何将解析 gem 用于 excel。谢谢

标签: ruby excel


【解决方案1】:

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

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

如果您绝对必须拥有 creek,我注意到有一个名为 Ditch 的 Creek 插件,它增加了一些列获取功能。示例:

  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

【讨论】:

  • 谢谢。如果我只想检索列值而不是列标签,即 . A、B 等,我将如何调整你的最后一种方法。
  • @ultrasamad 要使用Ditch 获取值,请使用row.lookup('key')。在 Creek 中,每一行都是一个哈希,所以你可以使用 Hash#values
【解决方案2】:

要读取各个列,您可以使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    相关资源
    最近更新 更多