Исключить заголовки при импорте содержимого электронной таблицы Google с помощью Roo - PullRequest
0 голосов
/ 13 сентября 2018

Я создал задачу rake для импорта пользователей из Google Sheet.Поэтому я использую камень ' Roo '.Пока все работает, но я не могу заставить его работать без импорта первой строки (заголовков).

Это мой код:

require 'roo'

namespace :import do
  desc "Import users from Google Sheet"
  task users: :environment do

    @counter = 0
    url = 'https://docs.google.com/spreadsheets/d/{mycode}/export?format=xlsx'
    xlsx = Roo::Spreadsheet.open(url, extension: :xlsx, headers: true)
    xlsx.each do |row|
        n = User.where(name:row[0]).first
        user = User.find_or_create_by(id: n)
        user.update(
                     name:row[0],
                     country_id:row[6]
                   )
        user.save!
        puts user.name
        @counter += 1
      end
     puts "Imported #{@counter} lines."
    end
end

1 Ответ

0 голосов
/ 13 сентября 2018

Ваш код говорит headers: true, когда вы открываете лист.Вы пытались превратить это в ложь?Или вы говорите, что он не работает, если для него установлено значение false?

Кроме того, вы используете .each довольно иначе, чем пример в документации.Документ показывает хэш с ключами, полученными из заголовков.Вы используете [n] обозначение массива.Это работает?

РЕДАКТИРОВАТЬ:

Попробуйте использовать .each таким образом, который больше похож на то, что говорится в документации:

xlsx.each(name: 'Name', country_id: 'Country ID') do |row|
  n = User.where(name: row[:name]).first
  ...
end

Строки 'Имя' и«Идентификатор страны» являются лишь примерами;они должны быть текстом любых заголовков столбцов с информацией об имени и стране.

...