Nano Hash - криптовалюты, майнинг, программирование

Исключить заголовки при импорте содержимого электронных таблиц Google с помощью Roo

Я создал задачу 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

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

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

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

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

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

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

13.09.2018
  • Я пробовал true, false, first_row, но пока ничего не получилось. 13.09.2018
  • Отредактировал мой ответ с другим предложением. Неудивительно, что headers: false не работает; он указан в документах как вариант для .parse, но вы пытаетесь использовать его в .open. 13.09.2018
  • Спасибо! Я повторно использовал .each из старого проекта, в который я импортировал из CSV вместо электронной таблицы. Я переписал его, но, к сожалению, заголовки все еще импортируются. 13.09.2018
  • Хорошо, вы также можете просто пропустить первую строку, верно? xlsx[1..-1].each 13.09.2018
  • Я был так сосредоточен на заголовках, что не подумал полностью пропустить первую строку. К сожалению, ваше предложение приводит к следующей ошибке NoMethodError: undefined method [] for #<Roo::Excelx:0x00007f9c2858bd50> 13.09.2018

  • 2

    Есть способ пропустить заголовки, он использует метод: each_row_streaming(offset: 1).

    Он вернет массив со строками, пропускающими заголовок, поэтому вам нужно получить значение, используя метод .value. В документации укажите это для Excelx::Cell объектов, но это работает и для Roo::Spreadsheet объектов. Пример документации:

    xlsx.each_row_streaming(offset: 1) do |row| # Will exclude first (inevitably header) row
      puts row.inspect # Array of Excelx::Cell objects
    end
    
    20.01.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..