我已将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]无法访问。可能已损坏或只读...我已经改变了所有可能性,如宝石升级,哑剧式改变但没有运气......
任何人都可以说出错误是什么
答案 0 :(得分: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")
}
尝试针对当前的excel文件执行以前的excel文件的diff,看看是否存在奇怪的空白差异或类似内容。