我正在使用此Spreadsheet gem来导出xls文件。
我的控制器中有以下代码:
def export
@data = Data.all
book = Spreadsheet::Workbook.new
sheet = book.create_worksheet :name => "data"
contruct_body(sheet, @data)
book.write "data.xls"
end
通过这种方式,我可以填写数据并将其保存在根目录中。
但我想下载它而不是保存它。我怎么能修改代码,以便用户提示选择他的本地目录来保存文件? (如果不在服务器端保存副本,则更好)
请帮忙!
答案 0 :(得分:50)
您可以将其发送到浏览器,而不必将其保存为本地文件,如下所示
spreadsheet = StringIO.new
book.write spreadsheet
send_data spreadsheet.string, :filename => "yourfile.xls", :type => "application/vnd.ms-excel"
答案 1 :(得分:2)
你可以试试这段代码
book.write "data.xls"
send_file "/path/to/data.xls", :type => "application/vnd.ms-excel", :filename => "data.xls", :stream => false
# and then delete the file
File.delete("path/to/data.xls")
将:stream => false
传递给send_file
会指示Rails在传输之前将整个文件复制到内存中,因此File.delete
之后立即使用send_file
就可以了send_file
}立即返回,而不等待下载完成。话虽如此,对于非常大的文件,您可能会看到一些内存瓶颈,具体取决于可用内存量。
HTH
答案 2 :(得分:0)
案件发生在我身上。 我使用remote :: true的ajax请求导出excel文件,浏览器上没有任何显示,控制台上没有任何错误消息。 从表单中删除远程参数,效果很好。
答案 3 :(得分:0)
我知道这太疯狂了,但我一直在寻找,所以可能有人会这样。
这就是答案。 (我正在使用Sinatra。)
https://github.com/zdavatz/spreadsheet/issues/125#issuecomment-370157753