ruby-on-rails - Rails - 使用 axlsx gem (Keep MVC) 将记录导出到可下载的 excel 文件

标签 ruby-on-rails ruby export-to-excel

我已经从 https://github.com/randym/axlsx 成功安装了 axlsx gem 这是我用来通过这个 gem 创建 excel 文件的 Controller 代码。

但是这段代码没有任何反应,而是显示了一个错误未初始化的 mime

class Coaches::PaymentsController < ApplicationController

  before_filter :authenticate_coach!

  # List all the payments
  def index
    if !params[:sort].blank?
      @payments = Payment.includes(:member).paginate(:page => params[:page], :order => sort_column + " " + sort_direction)
    else
      @payments = Payment.includes(:member).paginate(:page => params[:page], :order=>'id desc')
    end
    respond_to do |format|
      format.html
      # Change format to xlsx
      format.xlsx
      format.json { render json: @payments }
    end
  end
end

其次,我尝试使用这段代码:

wb = xlsx_package.workbook
wb.add_worksheet(name: "Buttons") do |sheet|
  @buttons.each do |button|
    sheet.add_row [button.name, button.category, button.price]
  end
end

但不幸的是,它不起作用。谁能告诉我仅提示而不是解决方案来完成我的任务?

我按照建议尝试了第三次:

   def index
    if !params[:sort].blank?
      @payments = Payment.includes(:member).paginate(:page => params[:page], :order => sort_column + " " + sort_direction)
    else
      @payments = Payment.includes(:member).paginate(:page => params[:page], :order=>'id desc')
    end
    respond_to do |format|
      format.xlsx do
        p = Axlsx::Package.new
        wb = p.workbook
        wb.add_worksheet(name: "Your worksheet name") do |sheet|
          sheet.add_row ["First Column", "Second", "Third"]
          sheet.add_row [1, 2, 3]
          sheet.add_row [' preserving whitespace']
        end
        send_data p.to_stream.read, type: "application/xlsx", filename: "filename.xlsx"
      end
    end
  end

它抛出了 http 406 错误

最佳答案

尝试使用 axlsx_rails带有模板的 gem 。 就我而言,我使用以下配置使其工作。以及扩展名为 .xlsx 的链接,以 xlsx 格式呈现它。

gem 文件

gem 'axlsx', '~> 2.0'
gem "axlsx_rails"

Controller 文件- payments_controller.rb

def download
    @payments = Payment.all
    respond_to do |format| 
       format.xlsx {render xlsx: 'download',filename: "payments.xlsx"}
    end
end

查看文件-download.xlsx.axlsx

wb = xlsx_package.workbook
wb.add_worksheet(name: "Payments") do |sheet|
    sheet.add_row ["ID", "Notes","Amount($)","Deposit Date"]
    @payments.each do |payment|
        sheet.add_row [payment.id, payment.notes,payment.amount,payment.date_deposite]
    end
end

关于ruby-on-rails - Rails - 使用 axlsx gem (Keep MVC) 将记录导出到可下载的 excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24053901/

相关文章:

ruby-on-rails - Rails.env 在哪里设置?

ruby-on-rails - 在sqlite3中设置表之间的链接。滑轨5

ruby - 安装新 Ruby gem 时 RDoc::TopLevel:Class 的未定义方法 `reset'

c# - Epplus excel文件中的下拉项目数量限制

ruby-on-rails - 网络::SFTP 错误

ruby-on-rails - 如何使用 ruby​​ on Rails 在 vi​​deo_tag 中传递静音选项

ruby - 在 Sprockets 编译任务中禁用文件摘要

ruby - 如何使用 CouchPotato 从 CouchDB 中删除文档?

node.js - 如何从AWS MWS API json响应下载.xlsx文件?

javascript - 关于 :blank#blocked error when export table in excel