【问题标题】:How can I download multiple .xlsx files using axlsx gem?如何使用 axlsx gem 下载多个 .xlsx 文件?
【发布时间】:2014-08-28 06:12:39
【问题描述】:

您好,我无法使用 axlsx 下载多个文件。问题是我正在向控制器发送一组 Id,并要求它使用 render 命令下载报告。它引发了一个 AbstractController::DoubleRenderError。我正在考虑覆盖错误,但意识到这是一个坏主意,我不知道还能做什么......有什么建议吗?谢谢。

我的控制器代码如下所示:

  def download_report
    params[:user_id].each do |user_id|
      @report = Report.find_by(:user_id => user_id)
      render :xlsx => "download_report", :filename => "#{@report.user.last_name}.xlsx"
    end
  end

我的 axlsx 模板:

  wb = xlsx_package.workbook
  wb.add_worksheet(name: "Reports") do |sheet|
    wb.styles do |s|
      # template code
    end
  end

【问题讨论】:

    标签: download axlsx


    【解决方案1】:

    Rails 的内置期望是每次请求调用一次渲染。而且,浏览器会期望每个请求有一个响应。所以,你将不得不做其他事情!

    您可以使用render_to_string,并将结果合并到一个 zip 文件中,以提供服务。请参阅此回复的底部。

    或者,您可以创建一个电子表格,让每个用户的报告显示在他们自己的工作表上。

    或者,在客户端,您可以使用 javascript 来请求每个电子表格并单独下载每个电子表格。

    zip 类似于此代码,它使用 render_to_stringrubyzipsend_data

    def download_report
      compressed_filestream = Zip::ZipOutputStream.write_buffer do |zos|
        params[:user_id].each do |user_id|
          @report = Report.find_by(:user_id => user_id)
          content = render_to_string :xlsx => "download_report", :filename => "#{@report.user.last_name}.xlsx"
          zos.put_next_entry("user_#{user_id}.xlsx")
          zos.print content
        end
      end
      compressed_filestream.rewind
      send_data compressed_filestream.read, :filename => 'download_report.zip', :type => "application/zip"
    end
    

    Axlsx 需要 ruby​​zip,因此您应该已经拥有它。而且您可能希望查找每个用户并将他们的姓名用于电子表格,除非您另有规定。

    【讨论】:

    • 感谢您的评论我非常乐观它可以工作。我按照你说的做了,现在我得到一个未初始化的常量 Zip::ZipOutputStream 错误。你知道这是为什么吗?我在网上搜索过,发现 ruby​​zip 1.0.0 会产生这个错误,并且还要使用 :require 'zip/zip' 或 require 'zip'。这些都没有帮助。我觉得这很容易解决,只是似乎找不到它。我是新来的。提前致谢。
    • 查看您的锁定文件,让我知道那里有哪些 axlsx 和 ruby​​zip 版本。另外,您的 Gemfile 中有什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    相关资源
    最近更新 更多