将xlsx文件发送到前端 - AngularJS

时间:2016-08-29 10:38:53

标签: ruby-on-rails ruby excel xlsx rubyxl

我想将rubyXL 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')。但它没有帮助我。

1 个答案:

答案 0 :(得分:0)

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

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