将 Excel 电子表格中的数据提取到 Ruby 中的数据库中

Posted

技术标签:

【中文标题】将 Excel 电子表格中的数据提取到 Ruby 中的数据库中【英文标题】:Extract Data from Excel Spreadsheet into Database in Ruby 【发布时间】:2017-01-24 10:15:54 【问题描述】:

我希望从 Rails 应用程序的电子表格中提取大量数据,但我正在通过 Rails 控制台进行提取。

我的数据库中有一个名为instititutes 的表,目前有大约 170 条记录。我在包含 c.1000 条记录的电子表格中找到了更好的数据,并希望将其导入我的数据库,但要跳过任何已经匹配的记录。

我认为使用 find_or_create_by 方法是最好的选择。电子表格有 UKPRNNAME 作为标题,表格有 ukprnname 作为各自的列(以及其他列)。

使用 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

【问题讨论】:

p roweach_row 中输出什么?没有row = Institute... 【参考方案1】:

您的表格有 ukprnname 作为各自的列,所以 find_or_create 应该如下所示:

Institute.find_or_create_by(ukprn: ukprn , name: name)

现在你只需要从row初始化ukprnname

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 在控制台中复制粘贴(不推荐)

【讨论】:

抱歉,但是从控制台执行此操作的最佳方法是什么?

以上是关于将 Excel 电子表格中的数据提取到 Ruby 中的数据库中的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式从 Excel 电子表格中提取数据

如何将excel电子表格中带有多个连字符“-”的中的某一数字用公式提取出来,数据量比较大,一个一个的输入很

如何提取银行数据并将其导入 OneDrive 中的 Excel?

怎么照片里的表格提取成电子表格

提取数据 LibXL C++

表格中如何提取指定单元格的内容呢?