Похоже, row
, чей класс Spreadsheet::Excel::Row
фактически является Excel Range
, и что он либо включает Enumerable, либо, по крайней мере, демонстрирует некоторые перечислимые поведения, например #each
.
Так что вы можете переписать ваш скрипт примерно так:
require 'spreadsheet'
book = Spreadsheet.open('myexcel.xls')
sheet1 = book.worksheet('Sheet1') # can use an index or worksheet name
sheet1.each do |row|
break if row[0].nil? # if first cell empty
puts row.join(',') # looks like it calls "to_s" on each cell's Value
end
Обратите внимание, что я заключил в скобки аргументы, которые обычно целесообразны в наши дни, и удалил точки с запятой, которые не нужны, если вы не пишете несколько операторов в строке (что вы должны делать редко - если вообще когда-либо - делать) .
Вероятно, это похмелье от более крупного сценария, но я укажу, что в данном коде переменные book
и sheet1
на самом деле не нужны, и что Spreadsheet#open
занимает блок, так что больше идиоматическая версия Ruby может выглядеть примерно так:
require 'spreadsheet'
Spreadsheet.open('MyTestSheet.xls') do |book|
book.worksheet('Sheet1').each do |row|
break if row[0].nil?
puts row.join(',')
end
end