Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Roo导入Google电子表格内容时排除标题_Ruby On Rails_Google Sheets_Roo - Fatal编程技术网

Ruby on rails 使用Roo导入Google电子表格内容时排除标题

Ruby on rails 使用Roo导入Google电子表格内容时排除标题,ruby-on-rails,google-sheets,roo,Ruby On Rails,Google Sheets,Roo,我创建了一个rake任务来从Google表单导入用户。因此,我使用的是gem“”。到目前为止,一切都正常,但如果不导入第一行(标题),我似乎无法让它正常工作 这是我的代码: require 'roo' namespace :import do desc "Import users from Google Sheet" task users: :environment do @counter = 0 url = 'https://docs.google.com/spre

我创建了一个rake任务来从Google表单导入用户。因此,我使用的是gem“”。到目前为止,一切都正常,但如果不导入第一行(标题),我似乎无法让它正常工作

这是我的代码:

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

打开工作表时,代码会显示
标题:true
。你试过把它变成假的吗?或者你是说当它设置为false时它不工作

此外,您使用的
。每个
与文档中的示例完全不同。文档显示了一个哈希,其中包含从标题派生的键。您正在使用
[n]
数组表示法。这样行吗

编辑:

尝试使用
。每个
的使用方式与文档中所述的更为相似:

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

字符串“Name”和“Country ID”只是示例;它们应该是包含名称和国家/地区id信息的任何列标题的文本。

有一种方法可以跳过标题,它使用的方法是:
每行(偏移量: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

我试过真、假、第一排,但到目前为止都没有效果。用另一个建议编辑了我的答案。
headers:false
不起作用并不奇怪;它作为
.parse
的一个选项列在文档中,但您正试图在
中使用它。打开
。谢谢!我重新使用了一个旧项目中的
。每个
,我是从csv而不是电子表格导入的。我重写了它,但不幸的是标题仍然被导入。好的,你也可以跳过第一行,对吗
xlsx[1..-1]。每一行
我都非常关注标题,以至于我没有考虑完全跳过第一行。不幸的是,您的建议导致以下错误
NoMethodError:undefined method[]for#