Ruby on rails Excel导出不工作
我正在我的应用程序中添加CSV和Excel导出功能,但下载文件后,它只显示此Ruby on rails Excel导出不工作,ruby-on-rails,excel,export-to-excel,Ruby On Rails,Excel,Export To Excel,我正在我的应用程序中添加CSV和Excel导出功能,但下载文件后,它只显示此,而不是电子表格中所需的数据 我也分享我使用的方法和宝石 对于这个导出,我在模块导出下创建了一个单独的控制器和一个单独的类 require 'csv' require 'axlsx' # extend ActiveSupport::Concern # include Rails.application.routes.url_helpers module Export class ParseError < ::S
,而不是电子表格中所需的数据
我也分享我使用的方法和宝石
对于这个导出,我在模块导出下创建了一个单独的控制器和一个单独的类
require 'csv'
require 'axlsx'
# extend ActiveSupport::Concern
# include Rails.application.routes.url_helpers
module Export
class ParseError < ::StandardError; end
class ExportError < ::StandardError; end
class TimesheetExport
attr_accessor :error
def initialize(trackers, export_to='csv')
@trackers = trackers
@export_to = export_to
rescue ActiveRecord::RecordNotFound
end
def process
if !@trackers
@error = "Not Found"
return false
else
case @export_to
when "csv"
export_csv
when "xls"
export_xls
else
raise ExportError
end
end
end
def export_csv
columns = %w(Date Task Task_URL TimeSpent Log)
CSV.generate do |csv|
csv << columns
@trackers.each do |t|
csv << [t.created_at.to_s(:short_human_with_12hours),
t.task.name,
#project_task_url(t.task.project, t.task, host: AppConfig.app_url),
t.time_spent,
t.description ]
end
end
end
def export_xls
package = Axlsx::Package.new
workbook = package.workbook
workbook.add_worksheet(name: "Timesheet") do |sheet|
sheet.add_row ["Date", "Task Name","Time Spent","Log"]
@trackers.each do |t|
sheet.add_row [t.created_at.to_s(:short_human_with_12hours),
t.task.name,
t.time_spent,
t.description]
end
end
end
这就是我从导出控制器传递值的方式-
@exporter = Export::TimesheetExport.new(user_trackers, params[:export_to])
export_string = @exporter.process
if export_string
case params[:export_to]
when "csv"
send_data export_string,
type: 'text/csv; charset=iso-8859-1; header=present',
disposition: "attachment; filename=#{@exporter.file_name}"
when "xls"
send_data export_string,
type: 'application/xls; charset=iso-8859-1; header=present',
disposition: "attachment; filename=#{@exporter.file_name}"
end
else
flash[:alert] = @exporter.error
redirect_to timesheet_path
export_xls正在返回一个ruby对象,您需要返回文件流本身
def export_xls
package = Axlsx::Package.new
workbook = package.workbook
workbook.add_worksheet(name: "Timesheet") do |sheet|
sheet.add_row ["Date", "Task Name","Time Spent","Log"]
@trackers.each do |t|
sheet.add_row [t.created_at.to_s(:short_human_with_12hours),
t.task.name,
t.time_spent,
t.description]
end
end
package.to_stream.read # Return the file stream to send_data
end
export_xls正在返回一个ruby对象,您需要返回文件流本身
def export_xls
package = Axlsx::Package.new
workbook = package.workbook
workbook.add_worksheet(name: "Timesheet") do |sheet|
sheet.add_row ["Date", "Task Name","Time Spent","Log"]
@trackers.each do |t|
sheet.add_row [t.created_at.to_s(:short_human_with_12hours),
t.task.name,
t.time_spent,
t.description]
end
end
package.to_stream.read # Return the file stream to send_data
end