Ruby on Rails - 使用Spreadsheet RubyGem打开文件

时间:2011-06-30 02:26:04

标签: ruby-on-rails-3 rubygems spreadsheet

我想我可能错过了一些非常简单的东西,因为我是这个宝石的新手(以及一般的Ruby / Rails),但是我们走了......

我刚刚从RubyGems安装了Spreadsheet gem并使用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 个答案:

答案 0 :(得分:2)

问题是我试图读取的文件是开放的! N00b错了,但我最终弄明白了。

感谢大家的期待。

答案 1 :(得分:0)

在gem文件中使用parseexcel而不是电子表格。

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()

这是我的cities.xls excel文件

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