чтение только второй строки файла xlsx с использованием roo - PullRequest
0 голосов
/ 05 октября 2018

Я использую roo для чтения файла xlsx.

book = Roo::Spreadsheet.open("codes.xlsx")
sheet = book.sheet('Sheet1')

Это читает все строки в файле.

Я могу перебрать этот лист, используя

plans_sheet.each(column_1: 'column_1', column_2: 'column_2') do |hash|

Но эта итерация происходит из первой строки, которая также имеет все имена столбцов.Мне нужно взять только данные второй строки.

Обновление - когда вы делаете строку (2), она возвращает вам массив.И когда вы выполняете итерацию с использованием .each, он возвращает вам хеш, в котором ключ содержит имена столбцов.

Как это сделать.

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

Если вы хотите перебирать строки, начиная со второй, просто используйте Enumerable # drop

plans_sheet.each(column_1: 'column_1', column_2: 'column_2').drop(1) do |hash|
  # ...
end
0 голосов
/ 05 октября 2018

Roo::Excelx#each метод возвращает стандартный Ruby Enumerator:

enum = sheet.each(column_1: 'column_1', column_2: 'column_2')
enum.class # => Enumerator

Таким образом, есть два способа достичь вашей цели:

1) Использовать drop метод:

enum.drop(1).each do |hash| 
  # do something with the hash    
end

Если вам нужен только второй ряд:

  hash = enum.drop(1).first

2) Переместите внутреннюю позицию итератора:

enum.next # move 1 step forward to skip the first row

# continue moving
loop do
  hash = enum.next
  # do something with the hash
end

Если вам нужен только второй ряд:

  enum.next # skip the first row
  hash = enum.next # second row

Также учтите:

Существует класс Roo::Excelx::Sheet, который также представляет рабочий лист и имеет метод each_row, который получает параметр :offset.Но, к сожалению, у него нет возможности преобразовать строку в хеш с заданными ключами.

book = Roo::Spreadsheet.open("codes.xlsx")
sheet = book.sheet_for('Sheet1')

sheet.each_row(offset: 1) do |row| # skip first row
  # do something with the row
end
0 голосов
/ 05 октября 2018

Просто сделайте

whatever_sheet.row(2)

Всегда хорошо взглянуть на документацию, это объясняется в README.md Gem, см. https://github.com/roo-rb/roo#accessing-rows-and-columns

...