簡體   English   中英

將CSV導入Rails數據庫

[英]Importing a CSV to Rails database

我在本周早些時候問了這個問題,它運行良好。 我只是用稍大一點的電子表格進行了嘗試,但由於某種原因,它似乎不起作用。

我的代碼如下:

require 'roo'

xlsx = Roo::Spreadsheet.open(File.expand_path('../Downloads/unistats/LOCATION.csv'))
xlsx.each_row_streaming(offset: 1) do |row|
    Location.find_or_create_by(ukprn: row[0].value, accomurl: row[1].value, instbeds: row[3].value, instlower: row[4].value, instupper: row[5].value, locid: row[6].value, locname: row[7].value, lat: row[9].value, long: row[10].value, locukprn: row[11].value, loccountry: row[12].value, privatelower: row[13].value, privateupper: row[14].value, suurl: row[15].value)
end

但是與上次不同,這是出現此錯誤的原因:

NoMethodError: undefined method `each_row_streaming' for #<Roo::CSV:0xb9e0b78>
Did you mean?  each_row_using_tempdir

該文件是CSV而不是.xlsx,但這不會有所不同。

有什么想法我做錯了嗎?

實際上,您嘗試使用Excel方法讀取CSV文件確實有所不同。

Roo文檔的節選。

# Load a CSV file
s = Roo::CSV.new("mycsv.csv")

# Load a tab-delimited csv
s = Roo::CSV.new("mytsv.tsv", csv_options: {col_sep: "\t"})

# Load a csv with an explicit encoding
s = Roo::CSV.new("mycsv.csv", csv_options: {encoding: Encoding::ISO_8859_1})

讀取Excel和CSV文件的一種好方法是做類似的事情

if File.extname(filename).start_with?('xls')
  workbook = Roo::Excel.new(filename)  
else
  workbook = Roo::CSV.new(filename)
end

workbook.default_sheet = workbook.sheets[0]

(workbook.first_row..workbook.last_row).each do |line|
  ...
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM