Ruby on Rails - Открытие файла с помощью электронной таблицы RubyGem - PullRequest
0 голосов
/ 30 июня 2011

Я думаю, что я, вероятно, упускаю что-то довольно простое, поскольку я новичок в этом геме (и Ruby / Rails в целом), но здесь мы идем ...

Я только что установил гем Spreadsheet от RubyGems и использовал Bundler для его установки. После этого я перезапустил свой локальный сервер.

Я хочу создать свою базу данных из имеющегося у меня файла Excel, но я не могу открыть файл. Код у меня есть:

require 'spreadsheet'
Spreadsheet.client_encoding = 'UTF-8'

book = Spreadsheet.open('C:\Users\Lev Berlin\Documents\Personal\Projects
  \FactsRus\Nutritional Analysis Models\Data for Rails model import.xls')
sheet1 = book.worksheet('Sheet1')

И ошибка, которую я получаю после запуска> rails runner script / load_excel_file.rb (с кодом выше):

В доступе отказано - C: \ Users ... import.xls (Errno :: EACCES)

Как я уже сказал - я, вероятно, упускаю что-то очень простое, но любые указатели были бы признательны.

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

Проблема заключалась в том, что файл, из которого я пытался прочитать, был открыт! Ошибка N00b, но я в итоге разобрался.

Спасибо всем за внимание.

0 голосов
/ 30 июня 2011

используйте parseexcel в файле gem вместо электронной таблицы.

gem 'parseexcel'

напишите код ниже в файле db / seed.rb, поместите файл excel в папку project / db / data

def seed_cities
  workbook = Spreadsheet::ParseExcel.parse("#{Dir.getwd}/db/data/cities.xls")

  workbook.worksheet(0).each(1) { |row|
    next if row == nil;
    col = row.at(0);
    next if col == nil;
    id = col.to_s('latin1').strip;
    next if id == "";

    country_id = row.at(1).to_s('latin1').strip;
    state_id = row.at(2).to_s('latin1').strip;
    name = row.at(3).to_s('latin1').strip;
    code = row.at(4).to_s('latin1').strip;

    city = City.new(:country_id => country_id, :state_id => state_id, :name => name, :code => code)

    unless city.save
      city.errors.each { |e| puts "Database Error: ", e }
    end
  }

end

seed_cities()

это мой файл Excel.xls

id  country_id  state_id    name               code 
1   7            77          Lahore            LHR  
2   7            77          Islamabad         ISB
...