Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-使用axlsx gem将记录导出到可下载的excel文件(保留MVC)_Ruby On Rails_Ruby_Export To Excel - Fatal编程技术网

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

Ruby on rails Rails-使用axlsx gem将记录导出到可下载的excel文件(保留MVC),ruby-on-rails,ruby,export-to-excel,Ruby On Rails,Ruby,Export To Excel,我已从成功安装axlsx gem 这是我的控制器代码,我用来通过这个gem创建一个excel文件 但是这段代码没有发生任何变化,而是显示了一个未初始化的mime错误 class Coaches::PaymentsController < ApplicationController before_filter :authenticate_coach! # List all the payments def index if !params[:sort].blank?

我已从成功安装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
但不幸的是,它不起作用。有谁能告诉我仅仅是暗示而不是解决我任务的方法

根据建议,我已尝试了第三次:

   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错误

为了防止未初始化的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,对于跟踪,您可以看到启动rails的终端。

尝试使用Gem with template。 在我的例子中,我使用下面的配置使其工作。还有一个扩展名为.xlsx的链接,以xlsx格式呈现

宝石档案

gem 'axlsx', '~> 2.0'
gem "axlsx_rails"
控制器文件-付款\u 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
我用宝石

gem 'axlsx', '~> 2.0'
gem "axlsx_rails"
但这些宝石出现了一个错误。 当我从Gemfile.lock中删除'rubyzip'gem时,
bundle安装
问题就解决了。
谢谢。

Daniel我在mime中添加了代码,现在还有406个error@DineshSaini您请求xlsx文件的格式是什么?是否将响应处理为XLSX?你能给我们看一下请求的跟踪吗?我没有做什么特别的事,所有的代码都写在上面。如果您需要任何其他代码,请告诉我。@DineshSaini您可以包括失败请求的堆栈跟踪吗?它不显示错误。只是有406个错误的简单页面。因为需要锁定版本以支持ROR 3.2.6,所以需要使用任何其他方法来获得stackRight。这是导出到excel的最佳选项,它可以让MVC节省大量mime时间。
gem 'axlsx', '~> 2.0'
gem "axlsx_rails"
gem 'axlsx', '~> 2.0'
gem "axlsx_rails"