电子表格Rails 3问题

时间:2011-01-04 09:07:52

标签: ruby-on-rails

我已将rails 2.3.10应用程序升级到Rails 3.0.3。在我的应用程序中,我有像用户可以将数据下载到Excel中的功能。

我的宝石版:电子表格-0.6.4.1

我在Gemfile和Mime :: Type.register_alias“application / excel”中声明了gem版本,:application.rb中的xls。和我的excel 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窗口,并在弹出窗口中说“name.xls [2]无法访问。可能已损坏或只读...我已经改变了所有可能性,如宝石升级,哑剧式改变但没有运气......

任何人都可以说出错误是什么

1 个答案:

答案 0 :(得分: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文件执行以前的excel文件的diff,看看是否存在奇怪的空白差异或类似内容。