2011-06-30 16 views
0

我想我可能失去了一些東西很簡單,因爲我是新來這個寶石(和一般的Ruby/Rails),但在這裏我們去打開文件...Ruby on Rails的 - 使用電子表格RubyGem

我剛剛從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') 

和錯誤運行後,我得到>軌道亞軍腳本/ load_excel_file.rb(其中有上面的代碼)是:

權限被拒絕 - C:\用戶.. .import.xls(Errno :: EACCES)

就像我說的 - 我可能錯過了一些非常簡單的東西,但任何指針將不勝感激。

回答

1

問題是我試圖讀取的文件是打開的! N00b錯誤,但我最終發現了它。

非常感謝您的關注。

+0

這是我第二次遇到這個問題並閱讀你的答案。 :-) 謝謝。 –

0

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

gem 'parseexcel' 

寫在下面的db/seed.rb文件代碼放在項目/數據庫/數據文件夾中的Excel文件

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 
+0

電子表格是否總是需要額外的寶石才能夠從Excel讀取數據,或者這正是您拉動Excel數據的方式? – Lev

+0

其實parseexcel做所有的魔法東西。不需要打開關閉excel文件。這是工作代碼。如果您有權限錯誤,只需右鍵單擊項目文件夾,並授予「每個人」都有完全控制權限。 –

+0

它看起來像我通過權限'完全控制',仍然很困惑問題是什麼。 – Lev