2017-06-19 95 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