【发布时间】:2017-04-07 05:35:40
【问题描述】:
我正在使用电子表格 gem 来生成 .xls 文件。将其写入文件后,我正在尝试发送到客户端浏览器进行下载。
下面是rails中的代码
workbook = Spreadsheet::Workbook.new
# Constructed the data
file = "/path/to/file/sheet.xls"
workbook.write file
send_file file
此文件在打开时包含理想格式的预期数据。
下面是js中的代码:
CustomRestService.custom_post("report",{report_data: angular.toJson($scope.report_data)},"download_xls",{}).then (data)->
if data
hiddenElement = document.createElement('a')
angular.element(document.body).append(hiddenElement)
hiddenElement.href = 'data:attachment/xls,' + encodeURI(data)
hiddenElement.target = '_blank'
hiddenElement.download = "report.xls"
hiddenElement.click()
hiddenElement.remove()
但是在浏览器中下载的文件包含垃圾数据。我尝试了多种解决方案,如下所示:
- 使用 send_data,而不是 send_file
- 生成xls数据写入StringIO对象直接下载
- 在 js 中构造 Blob 对象,类型为“application/vnd.ms-excel”并尝试下载。
所有尝试都失败了,因为我遗漏了一些东西。欢迎所有建议。
【问题讨论】:
标签: ruby-on-rails angularjs ruby excel spreadsheet