Ruby gem Roo ワークブックの各行シート
概要
ここの他の投稿で述べたように、roo gem にはいくつかの複雑なドキュメントが含まれており、xlsx ワークブックのシートを反復処理してから各シートの行を反復処理する方法がわかりません。
ルージェム
各シートを反復処理すると、シート自体への参照ではなく、シートの名前のみが表示されます。だから宣言しなきゃいけないんです。すべての行を反復処理する方法はまだありません。
s = '/Users/user3/Desktop/departments.xlsx'
a = Roo::Spreadsheet.open(s)
sheets = a.sheets.reverse
sheets.each_with_index do |index, i|
sheet = a.sheet(index)
sheet.each_row do|row|
puts row
end
end
roo ドキュメントの他の例では、ワークブック ファイル内にデフォルトのシートと 1 つのシートがあることを前提としています。私の場合はそうではないので、すぐに混乱してしまいます。
テストして分析に含めるために、すべてのシートと行を反復処理するにはどうすればよいでしょうか?私が作業しているスプレッドシートには、空白の列と多くの行があり、いくつかのアートワークが含まれています…典型的なオフィス関連のものです。これらの人々はデータ担当者ではありません。スプレッドシートでの「創造性」を回避するには、すべての行を反復してテストし、空白セルを削除します。
ある程度の洞察力のある人は本当に感謝しています。
解決策
シート名をシートメソッドに渡す必要があります。このメソッドは次のように宣言します: Roo::Base#sheet
file = 'xxx/xxx.xlsx' # your file path
wb = Roo::Spreadsheet.open(file, extension: :xlsx)
sheet_names = wb.sheets # all sheet names in this workbook
sheet_names.each do |sheet_name|
curr_sheet = wb.sheet(sheet_name) # change default sheet
curr_sheet.each_row_streaming do |row|
# do something
end
end
上記の方法はすべてのテーブルを走査できますが、シートのコンテンツを操作するときに次の問題も発生します。
などなど、問題の連続です
別の Ruby gem を使用するか、Java の poi や easyexcel などの別の言語を使用して処理することをお勧めします。