ルビーを使用してExcelレコードをフィルタリングする方法


  1. Roo gemを使用する方法:
require 'roo'
# Excelファイルを開く
xlsx = Roo::Spreadsheet.open('path/to/file.xlsx')
# シートを選択する(デフォルトは最初のシート)
xlsx.default_sheet = xlsx.sheets.first
# ヘッダー行を取得する
header = xlsx.row(1)
# フィルタリング条件を指定する
# 例: 'name'列が'John'であるレコードをフィルタリングする
filtered_records = []
xlsx.each_row_streaming(offset: 1) do |row|
  record = Hash[[header, row.map(&:value)].transpose]
  filtered_records << record if record['name'] == 'John'
end
# フィルタリングされたレコードを出力する
filtered_records.each do |record|
  puts record
end
  1. Axlsx gemを使用する方法:
require 'axlsx'
# Excelファイルを開く
xlsx = Axlsx::Package.new
xlsx_workbook = xlsx.workbook
xlsx_worksheet = xlsx_workbook.add_worksheet(name: 'Sheet1')
# データを追加する(例として3つのレコードを追加)
xlsx_worksheet.add_row ['name', 'age']
xlsx_worksheet.add_row ['John', 25]
xlsx_worksheet.add_row ['Alice', 30]
xlsx_worksheet.add_row ['Bob', 35]
# フィルタリング条件を指定する
# 例: 'age'列が30以上のレコードをフィルタリングする
filtered_records = xlsx_worksheet.rows.select do |row|
  row.cells[1].value.is_a?(Numeric) && row.cells[1].value >= 30
end
# フィルタリングされたレコードを出力する
filtered_records.each do |record|
  record.cells.each do |cell|
    puts cell.value
  end
end
# Excelファイルを保存する
xlsx.serialize('path/to/file.xlsx')

上記の例では、Roo gemとAxlsx gemを使用してExcelファイルを操作し、指定した条件に基づいてレコードをフィルタリングしています。必要に応じて、フィルタリング条件を変更してください。

このようにして、Rubyを使用してExcelレコードをフィルタリングする方法を示しました。必要な場合は、上記のコード例を参考にして、より具体的な条件に基づいてフィルタリングを行ってください。