24

我正在使用此电子表格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

这样我就可以把数据填好,保存在根目录下。

但我想下载它而不是保存它。如何修改代码,以便用户提示选择他的本地目录来保存文件?(如果不在服务器端保存副本会更好)

请帮忙!

4

4 回答 4

52

您可以将其发送到浏览器而无需将其保存为本地文件,如下所示

spreadsheet = StringIO.new 
book.write spreadsheet 
send_data spreadsheet.string, :filename => "yourfile.xls", :type =>  "application/vnd.ms-excel"
于 2010-11-02T16:41:17.650 回答
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 => falsetosend_file将指示 Rails 在流式传输之前将整个文件复制到内存中,因此File.delete立即使用 aftersend_file会很好,因为send_file无需等待下载完成即可立即返回。话虽如此,对于非常大的文件,您可能会看到一些内存瓶颈,具体取决于可用内存量。

高温高压

于 2010-10-29T09:57:58.817 回答
1

我知道这已经过时了,但我一直在寻找它,所以其他人可能会。

这就是答案。(我正在使用 Sinatra。)

https://github.com/zdavatz/spreadsheet/issues/125#issuecomment-370157753

于 2020-07-08T00:51:17.583 回答
0

案件发生在我身上。我使用 remote::true 的 ajax 请求导出 excel 文件,浏览器上没有任何显示,控制台上没有任何错误消息。从表单中删除远程参数,效果很好。

于 2013-07-26T10:24:58.033 回答