如何把Roo Excel表格中的数组放在二维数组中
我使用ruby中的roo-gem来获得excel表单元值。
我有一个文件'ruby.rb':
require 'spreadsheet' require 'roo' xls = Roo::Spreadsheet.open('test_work.xls') xls.each do |row| p row end
我运行ruby ruby.rb时在terminal输出的是:
["id", "header2", "header3", "header4"] ["val1", "val2", "val3", "val4"] ["val1", "val2", "val3", "val4"]
当我添加:
require 'spreadsheet' require 'roo' xls = Roo::Spreadsheet.open('test_work.xls') xls.each do |row| two_dimensional = [] two_dimensional << row p two_dimensional end
我得到:
[["id", "header2", "header3", "header4"]] [["val1", "val2", "val3", "val4"]] [["val1", "val2", "val3", "val4"]]
我想要的是:
[["id", "header2", "header3", "header4"], ["val1", "val2", "val3", "val4"], ["val1", "val2", "val3", "val4"]]
我将如何去做这件事。
谢谢!
只需在each
块之外声明数组。 每次运行块时,都将其重置为[]
。 在这种情况下,你只能追加到一个数组。
two_dimensional = [] xls = Roo::Spreadsheet.open('test_work.xls') xls.each do |row| two_dimensional << row p two_dimensional end
你也可以试试
require 'rubygems' require 'roo' class InputExcelReader $INPUTPATH = 'C:\test_input_excel.xlsx' excel_data_array = Array.new() workbook = Roo::Spreadsheet.open($INPUTPATH) worksheets = workbook.sheets puts worksheets puts "Found #{worksheets.count} worksheets" worksheets.each do |worksheet| puts "Reading: #{worksheet}" num_rows = 0 workbook.sheet(worksheet).each_row_streaming do |row| if(num_rows>0) puts "Reading the row no: #{num_rows}" row_cells = row.map { |cell| puts "Reading cells" cell.value } excel_data_array.push(row_cells) end num_rows += 1 end puts excel_data_array.to_s end end