将 Excel 电子表格中的数据提取到 Ruby 中的数据库中
Extract Data from Excel Spreadsheet into Database in Ruby
我想从 Rails 应用程序的电子表格中提取大量数据,但我是通过 Rails 控制台进行提取的。
我的数据库中有一个名为 instititutes
的 table,目前有大约 170 条记录。我在包含 c.1000 条记录的电子表格中发现了更好的数据,并想将其导入我的数据库,但要跳过任何已经匹配的记录。
我认为使用 find_or_create_by 方法是最好的选择。电子表格有 UKPRN
和 NAME
作为 headers,table 有 ukprn
和 name
作为各自的列(以及其他)。
使用 Roo gem,到目前为止我得到了这个:
require 'roo'
xlsx = Roo::Spreadsheet.open(File.expand_path('../Downloads/UKPRN.xlsx'))
xlsx.default_sheet = xlsx.sheets.last
header = xlsx.row(1)
xlsx.each_row do |row|
row = Institute.find_or_create_by(UKPRN: ukprn , NAME: name)
end
这给出了错误 NameError: unitialized constant UKPRN
。我仍在重新思考 Ruby,因此我们将不胜感激。
我正在使用 Ruby 2.2.3 和 Rails 5.0.1
编辑:
p row
显示:
["UKPRN", "NAME"]
[10000291, "Anglia Ruskin University"]
[10000385, "The Arts University Bournemouth"]
[10000571, "Bath Spa University"]
[10000712, "University College Birmingham"]
[10000824, "Bournemouth University"]
[10000886, "The University of Brighton"]
[10000961, "Brunel University London"]
...etc
你的 table 有 ukprn
和 name
作为各自的列,所以 find_or_create
应该看起来像:
Institute.find_or_create_by(ukprn: ukprn , name: name)
现在您只需从 row
.
初始化 ukprn
和 name
require 'roo'
xlsx = Roo::Excelx.new(File.expand_path('../Downloads/UKPRN.xlsx'))
xlsx.each_row_streaming(offset: 1) do |row|
Institute.find_or_create_by(ukprn: row[0].value, name: row[1].value)
end
要执行此代码,可以:
- 放入
db/seeds.rb
执行rake db:seed
- 放在
script.rb
和运行rails runner script.rb
- copy-paste 在控制台中(不推荐)
我想从 Rails 应用程序的电子表格中提取大量数据,但我是通过 Rails 控制台进行提取的。
我的数据库中有一个名为 instititutes
的 table,目前有大约 170 条记录。我在包含 c.1000 条记录的电子表格中发现了更好的数据,并想将其导入我的数据库,但要跳过任何已经匹配的记录。
我认为使用 find_or_create_by 方法是最好的选择。电子表格有 UKPRN
和 NAME
作为 headers,table 有 ukprn
和 name
作为各自的列(以及其他)。
使用 Roo gem,到目前为止我得到了这个:
require 'roo'
xlsx = Roo::Spreadsheet.open(File.expand_path('../Downloads/UKPRN.xlsx'))
xlsx.default_sheet = xlsx.sheets.last
header = xlsx.row(1)
xlsx.each_row do |row|
row = Institute.find_or_create_by(UKPRN: ukprn , NAME: name)
end
这给出了错误 NameError: unitialized constant UKPRN
。我仍在重新思考 Ruby,因此我们将不胜感激。
我正在使用 Ruby 2.2.3 和 Rails 5.0.1
编辑:
p row
显示:
["UKPRN", "NAME"]
[10000291, "Anglia Ruskin University"]
[10000385, "The Arts University Bournemouth"]
[10000571, "Bath Spa University"]
[10000712, "University College Birmingham"]
[10000824, "Bournemouth University"]
[10000886, "The University of Brighton"]
[10000961, "Brunel University London"]
...etc
你的 table 有 ukprn
和 name
作为各自的列,所以 find_or_create
应该看起来像:
Institute.find_or_create_by(ukprn: ukprn , name: name)
现在您只需从 row
.
ukprn
和 name
require 'roo'
xlsx = Roo::Excelx.new(File.expand_path('../Downloads/UKPRN.xlsx'))
xlsx.each_row_streaming(offset: 1) do |row|
Institute.find_or_create_by(ukprn: row[0].value, name: row[1].value)
end
要执行此代码,可以:
- 放入
db/seeds.rb
执行rake db:seed
- 放在
script.rb
和运行rails runner script.rb
- copy-paste 在控制台中(不推荐)