ruby-on-rails - Ruby on Rails 中的 send_data 与电子表格插件结合使用时遇到困难

标签 ruby-on-rails excel spreadsheet xml-spreadsheet

我在 Controller 中有一个函数,它接受一些规范并生成有关它们的报告。这个函数 user_report 在 View 中被调用:

< %= Submit_to_remote '提交按钮', "将报告导出到 Excel", :url => { :controller => :reports, :action => :user_report, :print_state => '打印'} % >

在 reports_controller 中,我使用电子表格插件在 user_report 函数中生成 Excel 文件。我想使用 send_data 将文件流式传输给用户,而不先在服务器上创建它。我所做的研究表明,使用 StringIO 是可行的方法,如下所示。令人沮丧的是,当我调用 send_data 时没有任何反应。该插件似乎可以很好地创建文件并将其保存在服务器上,但当我使用 send_file 时什么也不做,这表明问题不在于插件。但是我对 send_file/send_data 做错了什么?

函数本身如下所示:

def user_report

if request.post?
  unless params[:reports][:userid].blank?
    @userid=params[:reports][:userid]
  end
  if params[:print_state]=='print'  

    report = Spreadsheet::Workbook.new
    info = report.create_worksheet :name => 'User Information'
    info.row(1).push 'User ID', @userid

    @outfile = "Report_for_#{@userid}.xls"

    require 'stringio'
    data = StringIO.new ''
    report.write data
    send_data data.string, :type=>"application/excel", :disposition=>'attachment', :filename => @outfile
  end

  respond_to do |format|
    format.js { }
  end
end

end

日志文件读取 2010-10-18 14:13:59 INFO -- 发送数据 Report_for_jjohnson.xls 但浏览器中没有开始下载。我之前曾在此应用程序上成功使用过 send_data,这令人困惑。

我正在电子表格.rubyforge.org 上使用 Rails v2.3、Ruby v1.8.7 和 Spreadsheet v6.4.1。

最佳答案

只需更改行:

send_data data.string, :type=>"application/excel", :disposition=>'attachment', :filename => @outfile

至:

send_data data.string.bytes.to_a.pack("C*"), :type=>"application/excel", :disposition=>'attachment', :filename => @outfile

关于ruby-on-rails - Ruby on Rails 中的 send_data 与电子表格插件结合使用时遇到困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3962896/

相关文章:

sql - 如何从 Rails 中的数据库中选择具有 ID 的不同记录?

ruby-on-rails - 具有远程文件支持 (FTP/sFTP) 的 Windows Rails-IDE

ruby-on-rails - 如何在 Rails 中将数据从 View 传递到 Controller

excel - Excel 中基于多列的查找

java - 建议设计 UI 屏幕以生成 XML 的方法

javascript - 比较日期谷歌表格脚本

ruby-on-rails - 如何在没有 Rails 4 的情况下向所有 url 添加一个 trailing_slash?

forms - 在用户表单之间传递数据

vba - 基质分布

google-sheets - 我从一个简单的查询中收到此消息(CANNOT_GROUP_WITHOUT_AGG)