2011-06-30 9 views
0

を使用してファイルを開く、私はおそらく、(一般的にとRuby/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

これは私がこの問題に遭遇して答えを読んでいる2回目です。 :-)ありがとう。 –

0

スプレッドシートの代わりにgemファイルでparseexcelを使用します。書き込みコードの下

gem 'parseexcel' 

デシベル/ seed.rbファイル内のプロジェクト/ DB /データフォルダに

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ファイルを置き、これは私のcities.xlsがファイル

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

スプレッドシートはExcelからデータを読み込むためには常に追加の宝石が必要ですか、これはExcelデータを取得する方法と同じですか? – Lev

+0

実際にparseexcelすべての魔法のものを行います。 Excelファイルを開く必要はありません。これは作業コードです。権限のエラーが表示された場合は、プロジェクトフォルダを右クリックし、「Everyone」の権限をフルコントロールしてください。 –

+0

私は権限を介して 'フルコントロール'を持っているように見えますが、問題はまだかなり混乱しています。 – Lev