Files
old-holivud2/app/models/excel_reports/worksheet.rb
2020-05-31 22:38:19 +02:00

54 lines
2.0 KiB
Ruby

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