0

我想将 ruby​​XL gem 创建的 xlsx 文件发送到前端,即 AngularJS。当我将工作表保存在流中并通过 send_data 方法发送时,我得到了数据,但我无法打开创建的文档,因为它已损坏。

workbook = RubyXL::Workbook.new
worksheet = workbook[0]
worksheet.sheet_name = 'Average of Team'
worksheet.add_cell(0, 0, 'A1')
buffer = workbook.sream
send_data buffer

我能够将数据保存到磁盘。但我无法将其发送到客户端。所以,我可以从 angularjs 访问数据。

workbook = RubyXL::Workbook.new
worksheet = workbook[0]
worksheet.sheet_name = 'Average of Team'
worksheet.add_cell(0, 0, 'A1')
path = "#{Rails.root}/tmp/#{Time.now.strftime('%Y%m%d%H%M%S%L')}.xlsx"
workbook.write(path)
send_file path

我不想将工作簿保存在云上并将链接发送到客户端。我的问题的最佳解决方案是什么?我在哪里犯错?

UPD: 似乎当我尝试发送保存的文件时,我在发送完成之前删除了文件。

UPD: 当我发送数据时,我遇到了编码数据的问题。我尝试使用string.bytes.to_a.pack("C*"), string.force_encoding('binary')。但这对我没有帮助。

4

1 回答 1

0

我认为问题在于 ruby​​ 和 js 库之间不兼容。一种可能的解决方案是在后端运行前端库,以便处理具有相同库的文件。可以使用 V8 js 引擎https://github.com/cowboyd/therubyracer

但我不能 100% 确定我的解决方案是独一无二的,并且是最好的 :) 我有一个类似的问题,我已经以这种方式解决了。

于 2016-08-29T14:38:17.260 回答