Initial commit
This commit is contained in:
53
app/models/excel_reports/worksheet.rb
Normal file
53
app/models/excel_reports/worksheet.rb
Normal file
@@ -0,0 +1,53 @@
|
||||
module ExcelReports
|
||||
class Worksheet
|
||||
attr_accessor :workbook, :data, :header_data
|
||||
|
||||
def self.build(workbook, data = nil, header_data = nil)
|
||||
new(workbook, data, header_data).tap do |worksheet|
|
||||
worksheet.build
|
||||
end
|
||||
end
|
||||
|
||||
def initialize(workbook, data = nil, header_data = nil)
|
||||
@workbook = workbook
|
||||
@data = data
|
||||
@header_data = header_data
|
||||
end
|
||||
|
||||
def build
|
||||
workbook.add_worksheet(name: title) do |sheet|
|
||||
fill_content(sheet)
|
||||
format(sheet)
|
||||
style(sheet)
|
||||
end
|
||||
end
|
||||
|
||||
module Styles
|
||||
def self.merge_all(*styles)
|
||||
styles.each_with_object({}) { |style, combined| combined.deep_merge!(style) }
|
||||
end
|
||||
|
||||
BOLD = { b: true }
|
||||
ITALIC = { i: true }
|
||||
UNDERLINE = { u: true }
|
||||
BG_GRAY = { bg_color: "C0C0C0" }
|
||||
BG_LIGHT_BLUE = { bg_color: "97CBFC" }
|
||||
BG_YELLOW = { bg_color: "FFFF9E" }
|
||||
COLOR_WHITE = { fg_color: "FFFFFF" }
|
||||
COLOR_BLUE = { fg_color: "0000FF" }
|
||||
COLOR_RED = { fg_color: "FF0000" }
|
||||
THIN_BLACK_BORDER = { border: { style: :thin, color: "000000" } }
|
||||
THICK_BLACK_BORDER = { border: { style: :thick, color: "000000" } }
|
||||
VERTICAL_CENTER = { alignment: { vertical: :center } }
|
||||
HORIZONTAL_CENTER = { alignment: { horizontal: :center } }
|
||||
HORIZONTAL_LEFT = { alignment: { horizontal: :left } }
|
||||
HORIZONTAL_RIGHT = { alignment: { horizontal: :right } }
|
||||
FULLY_CENTERED = merge_all(HORIZONTAL_CENTER, VERTICAL_CENTER)
|
||||
WRAP_TEXT = { alignment: { wrap_text: true } }
|
||||
TABLE_HEADER = merge_all(Styles::BG_LIGHT_BLUE, Styles::BOLD, Styles::THICK_BLACK_BORDER, Styles::FULLY_CENTERED, Styles::WRAP_TEXT, { sz: 8 })
|
||||
TABLE_DATA = merge_all(Styles::THICK_BLACK_BORDER, Styles::WRAP_TEXT, { sz: 10 })
|
||||
PROGRAM_HEADER = merge_all(Styles::BG_LIGHT_BLUE, Styles::BOLD, Styles::THICK_BLACK_BORDER, Styles::HORIZONTAL_CENTER, Styles::WRAP_TEXT, { sz: 12 })
|
||||
HEADER_DATA = merge_all(Styles::THICK_BLACK_BORDER, Styles::WRAP_TEXT, Styles::HORIZONTAL_LEFT, { sz: 10 })
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user