Ruby on rails 使用Roo导入Google电子表格内容时排除标题
我创建了一个rake任务来从Google表单导入用户。因此,我使用的是gem“”。到目前为止,一切都正常,但如果不导入第一行(标题),我似乎无法让它正常工作 这是我的代码: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
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#