Commit 2aea9d55 by liyijie

feat: export with association_records

parent 594adf32
...@@ -64,6 +64,23 @@ module TalltyImportExport ...@@ -64,6 +64,23 @@ module TalltyImportExport
export_workbook workbook, records, **options export_workbook workbook, records, **options
end end
# 是否导出详细子表
# export_association_headers的结构,是association结合
if respond_to?(:export_association_headers)
export_association_headers(**options).each do |export_association, association_headers|
records.each do |record|
association_records = record.send(:export_association)
export_workbook(
workbook,
association_records,
sheet_name: record.try(:name),
export_headers: association_headers,
**options,
)
end
end
end
file_path = File.join(Rails.root, 'public', 'export') file_path = File.join(Rails.root, 'public', 'export')
# file_path = File.join('/Users/mushu/', 'export') # file_path = File.join('/Users/mushu/', 'export')
FileUtils.mkdir_p(file_path) unless Dir.exist?(file_path) FileUtils.mkdir_p(file_path) unless Dir.exist?(file_path)
...@@ -74,16 +91,17 @@ module TalltyImportExport ...@@ -74,16 +91,17 @@ module TalltyImportExport
end end
end end
def export_workbook(workbook, association_records, **options) def export_workbook(workbook, association_records, sheet_name: nil, export_headers: nil, **options)
# excel导出样式 # excel导出样式
alignment = { vertical: :center, horizontal: :center } alignment = { vertical: :center, horizontal: :center }
border = { color: '969696', style: :thin } border = { color: '969696', style: :thin }
title1 = workbook.styles.add_style(alignment: alignment, border: border, sz: 12, b: true) title1 = workbook.styles.add_style(alignment: alignment, border: border, sz: 12, b: true)
title2 = workbook.styles.add_style(alignment: alignment, border: border, bg_color: '2a5caa', sz: 12, fg_color: 'fffffb') title2 = workbook.styles.add_style(alignment: alignment, border: border, bg_color: '2a5caa', sz: 12, fg_color: 'fffffb')
title3 = workbook.styles.add_style(alignment: alignment.merge(wrap_text: true), border: border, sz: 10) title3 = workbook.styles.add_style(alignment: alignment.merge(wrap_text: true), border: border, sz: 10)
headers = export_headers_result(**options) headers = export_headers || export_headers_result(**options)
_sheet_name = respond_to?(:sheet_name) ? sheet_name : nil _sheet_name = respond_to?(:sheet_name) ? sheet_name : nil
_sheet_name ||= sheet_name
workbook.add_worksheet(name: _sheet_name) do |sheet| workbook.add_worksheet(name: _sheet_name) do |sheet|
if respond_to?(:first_header) if respond_to?(:first_header)
...@@ -211,12 +229,24 @@ module TalltyImportExport ...@@ -211,12 +229,24 @@ module TalltyImportExport
if r.is_a?(Array) if r.is_a?(Array)
r.try(m) || r.try(:[], m.to_i) r.try(m) || r.try(:[], m.to_i)
else else
data = r.try(:[], m) rescue nil data = begin
r.try(:[], m)
rescue StandardError
nil
end
if data.nil? if data.nil?
data = r.try(:[], m.to_sym) rescue nil data = begin
r.try(:[], m.to_sym)
rescue StandardError
nil
end
end end
if data.nil? if data.nil?
data = r.try(m) rescue nil data = begin
r.try(m)
rescue StandardError
nil
end
end end
data data
end end
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment