簡體   English   中英

Rails - 使用axlsx gem將記錄導出為可下載的excel文件(Keep MVC)

[英]Rails - Export records to downloadable excel file using axlsx gem (Keep MVC)

我已經從https://github.com/randym/axlsx成功安裝了axlsx gem這是我用來通過這個gem創建excel文件的控制器代碼。

但是這個代碼沒有任何反應,而是向我展示了一個未初始化的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 'axlsx', '~> 2.0'
gem "axlsx_rails"

controller file- 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

要防止未初始化的mime類型錯誤,請添加以下文件:

# config/initializers/mime_types.rb

Mime::Type.register "application/xlsx", :xlsx

以下是如何下載xlsx文件的簡短示例:

format.xlsx do
  p = Axlsx::Package.new
  wb = p.workbook
  wb.add_worksheet(name: "Your worksheet name") do |sheet|
    # Add your stuff
  end
  send_data p.to_stream.read, type: "application/xlsx", filename: "filename.xlsx"
end

請將render false設置為HTML並避免使用JSON而不是使用XLS,並且對於trace,您可以看到啟動rails的終端。

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

我用寶石。

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

但這些寶石出現了錯誤。 當我從Gemfile.lock中刪除'rubyzip'寶石時, bundle install問題已經解決。 謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM