0
내 앱에 CSV 및 Excel 내보내기 기능이 추가되었지만 파일을 다운로드 한 후 스프레드 시트에 필요한 데이터 대신 #<Axlsx::Worksheet:0x007f5d23708dc0>
이 표시됩니다.Excel 내보내기가 작동하지 않습니다.
나는 또한 내가 사용한 방법과 보석을 공유하고 있습니다.
이 수출, 나는 모듈 수출에서 별도의 컨트롤러와 별도의 클래스를 만들었습니다 설치되어
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 [email protected]
@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
보석 -
gem 'axlsx', '= 2.0.1'
gem 'axlsx_rails'
을 그리고 이것은 내가 전달 해요 방법입니다 내보내기 컨트롤러의 값 -
@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