通过gem axlsx rails生成的Zip Excel工作表

时间:2016-02-24 01:33:24

标签: ruby-on-rails axlsx

我正面临着如何压缩通过gem'axlsx_rails'生成的Excel工作表的问题。例如:

class SampleController < ApplicationController::Base

  def export
    if params[:zip]
        xxxx
    else
      render xlsx: 'export', filename: filename, disposition: 'attachment'
    end
  end

end

在上面的示例中,现在最终用户可以下载excel表,但如果最终用户请求excel表的zip文件,我们该怎么做呢。由于'else'块中的代码,最终用户可以下载excel表。如果用户希望在下载之前压缩excelsheet,我该怎么做。如果您需要任何进一步的信息,请告诉我。感谢

1 个答案:

答案 0 :(得分:1)

这是未经测试的代码,但请尝试使用Zip::ZipOutputStream

def export
  if params[:zip]
    compressed_filestream = Zip::ZipOutputStream.write_buffer do |zos|
      content = render_to_string xlsx: 'export', filename: filename
      zos.put_next_entry(filename)
      zos.print content
    end
    compressed_filestream.rewind
    send_data compressed_filestream.read, filename: 'export.zip', type: 'application/zip'
  else
    render xlsx: 'export', filename: filename, disposition: 'attachment'
  end
end

如果它不起作用,请在Github上创建一个问题,在我们开始工作后,我们可以将其添加到文档中。