Are there any gems able to parse XLS and XLSX files?

https://stackoverflow.com/questions/3321011/parsing-xls-and-xlsx-ms-excel-files-with-ruby


rooでxlsx形式のファイルの内容を表示する。
(view_xlsx.roo.rb)

#!/usr/bin/env ruby
require 'roo'

workbook = Roo::Spreadsheet.open ARGV[0]
worksheets = workbook.sheets
puts "Found #{worksheets.count} worksheets"

worksheets.each do |worksheet|
  #puts "Reading: #{worksheet}"
  num_rows = 1
  workbook.sheet(worksheet).each_row_streaming do |row|
    row_cells = row.map { |cell| cell.value }
    print "#{worksheet}: #{num_rows} #{row_cells}\n"
    num_rows += 1
  end
  #puts "Read #{num_rows} rows" 
end


実行してみる。
xlsxファイル:https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=2ahUKEwi-xPWo49PoAhWDHHAKHeSeCtsQFjAAegQIBhAC&url=https%3A%2F%2Fwww.data.jma.go.jp%2Fdeveloper%2Fpast_data%2Fdata_list_20190807.xlsx&usg=AOvVaw11RzjAWLsYpeJmLqcs4ZQW

$ ./view_xlsx.roo.rb ~/Downloads/data_list_20190807.xlsx
Found 2 worksheets
変更履歴: 1 []
変更履歴: 2 ["日付", "変更箇所", "変更内容"]
変更履歴: 3 ["2019.06.28", "全般", "運用開始"]
変更履歴: 4 ["2019.08.07", "高度な気象データ(観測) > 解析積雪深・解析降雪量", "解析積雪深と解析降雪量を新規追加"]
変更履歴: 5 [nil, "高度な気象データ(観測) > 海洋", "北西太平洋高解像度日別海面水温解析格子点資料 の2018年度データを追加"]
変更履歴: 6 [nil, "高度な気象データ(予報) > 海洋", "沿岸波浪数値予報モデルGPVを新規追加"]
変更履歴: 7 [nil, "高度な気象データ(防災情報)", "電文(気象特別警報/警報/注意報、全般気象情報、地方気象情報、府県気象情報、週間天気予報、天気予報\n)と図情報(地方、全国)を新規追加"]
20190807版: 1 ["気象過去データ利用環境 利用可能データ一覧(2019年8月7日時点版)", nil, nil, nil, "黄色背景は、前回からの変更"]
20190807版: 2 ["〇基本的な気象データ", nil, nil, nil, nil, nil, nil]
20190807版: 3 ["データ種類", "データ種類(細分)", "提供データ期間", "データディレクトリ", "アーカイブファイル", "容量の目安", "補足"]
20190807版: 4 ["地域気象観測(アメダス)", "10分値", "2003年1月~2019年3月", "/basic_data/kansoku/amedas", "10min_${yyyy}.tar.gz", "各200MB", "yyyy=2003~2019"]
20190807版: 5 [nil, "10分・時別値", "2008年3月~2019年3月", nil, "10min_h_${yyyy}.tar.gz", "各2GB", "yyyy=2008~2019", nil]
...


rubyXLでxlsx形式のファイルの内容を表示する。
(view_xlsx.rbxl.rb)

#!/usr/bin/env ruby
require 'rubyXL'

workbook = RubyXL::Parser.parse ARGV[0]
worksheets = workbook.worksheets
puts "Found #{worksheets.count} worksheets"

worksheets.each do |worksheet|
  #puts "Reading: #{worksheet.sheet_name}"
  num_rows = 0
  worksheet.each_with_index do |row, row_index|
    row_cells = ""
    row && row.cells.each{ |cell| cell && row_cells += cell.value.to_s + "\t" }
    puts "#{worksheet.sheet_name}: #{row_index}: #{row_cells}"
    num_rows += 1
  end
  #puts "Read #{num_rows} rows"
end

実行してみる。

$ ./view_xlsx.rbxl.rb ~/Downloads/data_list_20190807.xlsx
Found 2 worksheets
変更履歴: 0: 
変更履歴: 1: 日付	変更箇所	変更内容	
変更履歴: 2: 2019.06.28	全般	運用開始	
変更履歴: 3: 2019.08.07	高度な気象データ(観測) > 解析積雪深・解析降雪量	解析積雪深と解析降雪量を新規追加	
変更履歴: 4: 	高度な気象データ(観測) > 海洋	北西太平洋高解像度日別海面水温解析格子点資料 の2018年度データを追加	
変更履歴: 5: 	高度な気象データ(予報) > 海洋	沿岸波浪数値予報モデルGPVを新規追加	
変更履歴: 6: 	高度な気象データ(防災情報)	電文(気象特別警報/警報/注意報、全般気象情報、地方気象情報、府県気象情報、週間天気予報、天気予報
)と図情報(地方、全国)を新規追加	
20190807版: 0: 気象過去データ利用環境 利用可能データ一覧(2019年8月7日時点版)				黄色背景は、前回からの変更	
20190807版: 1: 
20190807版: 2: 〇基本的な気象データ							
20190807版: 3: データ種類	データ種類(細分)	提供データ期間	データディレクトアーカイブファイル	容量の目安	補足	
20190807版: 4: 地域気象観測(アメダス)	10分値	2003年1月~2019年3月	/basic_data/kansoku/amedas	10min_${yyyy}.tar.gz	各200MB	yyyy=2003~2019	
20190807版: 5: 	10分・時別値	2008年3月~2019年3月		10min_h_${yyyy}.tar.gz	各2GB	yyyy=2008~2019		
....


参考)Excel date format cell and time zones
https://github.com/weshatheleopard/rubyXL/issues/223