2011-01-04 13 views
1

私のレール2.3.10アプリケーションをRails 3.0.3にアップグレードしました。私のアプリケーションでは、私はユーザーがExcelにデータをダウンロードできるような機能を持っています。スプレッドシートRails 3の質問

私の宝石のバージョン:スプレッドシート-0.6.4.1

私はGemfileとMIMEで宝石のバージョンを宣言している:: Type.register_alias "アプリケーション/エクセル"、:application.rbでXLS。そして私のエクセルgenerationgコード

<% 

book = Spreadsheet::Workbook.new 
data = book.create_worksheet :name => 'myname' 
data.row(0).concat %w{name email} 
header_format = Spreadsheet::Format.new :color => :green, :weight => :bold 
data.row(0).default_format = header_format 

@names.results_data.each_with_index { |n, i| 

data.row(i+1).push n.name,n.email 
} 

blob = StringIO.new('') 
book.write(file_blob) 
-%><%=blob.string%> 

私のコントローラのコードを次のとおりです。

respond_to do |format| 
     format.html 
     format.rss 
     format.xls {  
     view_output = render_to_string :action => "excel" << name 
     send_data(view_output, :type=>"application/ms-excel", :filename => "name.xls") 
     } 

問題は、Excelのリンクをクリックしたとき、それはExcelのウィンドウを開き、そのポップアップ「名前で述べています。 xls [2]はアクセスできません。 ...私はすべての宝石のようなpossibilitesアップグレード、MIMEタイプの変更が、運が変更されました...

を破損しているかだけ読み取ることができるいずれかのエラーが

+0

正しくコードするつもりです。http://stackoverflow.com/editing-help – Heikki

答えて

1

二つの考えが何であるかを言うことができます:

  1. excel.xls.erbをerbファイルにする必要はありません。現在のコントローラのヘルパーまたは別の方法のいずれかに簡単に配置できます。私はERbセマンティクスchanged a bunch in rails 3を知っているので、これはあなたのエラーの原因となる可能性があります。

    def render_to_xls(names, name = 'myname') 
    
        book = Spreadsheet::Workbook.new 
        data = book.create_worksheet :name => name 
        data.row(0).concat %w{name email} 
        header_format = Spreadsheet::Format.new :color => :green, :weight => :bold 
        data.row(0).default_format = header_format 
    
        names.results_data.each_with_index { |n, i| 
    
        data.row(i+1).push n.name,n.email 
        } 
        blob = StringIO.new('') 
        book.write(blob) 
        blob 
    end 
    

    以降では、あなたの応答コードに:

    respond_to do |format| 
         format.html 
         format.rss 
         format.xls {  
         send_data(render_to_xls(@names, name), :type=>"application/ms-excel", :filename => "name.xls") 
         } 
    
  2. 現在のExcelファイルに対して、前のエクセルファイルの差分をやってみて、そのような奇妙な空白の違いか何かがあるかどうかを確認。