Rails - Експортиране на записи в excel файл за изтегляне с помощта на axlsx gem (Запазване на MVC)

Инсталирах axlsx gem успешно от https://github.com/randym/axlsx Ето моят контролер код, който използвах за създаване на excel файл чрез този gem.

Но нищо не се случва с този код, вместо това ми показва грешка неинициализиран 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


person Dinesh Saini    schedule 05.06.2014    source източник


Отговори (5)


Опитайте да използвате axlsx_rails Gem с шаблон. В моя случай използвах конфигурацията по-долу, за да работи. а също и връзка с разширение .xlsx, за да го изобразите във формат xlsx.

GEM ФАЙЛ

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

файл на контролера - 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
person Ammy T    schedule 17.06.2014
comment
Това е най-добрият вариант за експорт в excel, запазва MVC - person Albert Català; 22.12.2015
comment
Спестих много време за пантомима. - person Albert.Qing; 30.04.2016

За да предотвратите грешката при неинициализиран 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
person Daniel    schedule 05.06.2014
comment
Даниел, добавих код в mime, все още има грешка 406 - person Dinesh Saini; 10.06.2014
comment
@DineshSaini какъв е форматът, с който искаш xlsx файла? Обработен ли е отговорът като XLSX? Можете ли да ни покажете стека на заявката? - person Daniel; 10.06.2014
comment
Не съм направил нищо специално, всички кодове са написани по-горе. Моля, кажете ми дали имате нужда от друг код. - person Dinesh Saini; 11.06.2014
comment
@DineshSaini можеш ли да включиш проследяването на стека на заявката, която е неуспешна? - person Daniel; 12.06.2014
comment
Не показва грешка. просто страница с грешка 406. всеки друг начин за получаване на стека - person Dinesh Saini; 12.06.2014
comment
Изглежда традиционно в проектите с отворен код е да се пропуска ключова част от информацията. Без регистриране на mime типа нищо не работи. - person John Small; 21.03.2019

Моля, задайте render false на HTML и избягвайте JSON, вместо това използвайте XLS и за проследяване можете да видите терминала, откъдето сте започнали релсите.

person user3735287    schedule 12.06.2014

Използвам скъпоценни камъни.

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

Но тези скъпоценни камъни възникнаха грешка. Когато премахна gem 'rubyzip' от Gemfile.lock, проблемът bundle install е решен. Благодаря.

person Murat    schedule 27.12.2016

person    schedule
comment
Правилно, защото трябва да се заключи версията, за да поддържа ROR 3.2.6 - person Dinesh Saini; 18.08.2015