Class: ExcelWalker::Writer::SheetBuilder
- Inherits:
-
Object
- Object
- ExcelWalker::Writer::SheetBuilder
- Defined in:
- lib/excel_walker/writer/sheet_builder.rb
Instance Attribute Summary collapse
-
#sheet ⇒ Object
readonly
Returns the value of attribute sheet.
Instance Method Summary collapse
- #build ⇒ Object
- #create_pane(x, y) ⇒ Object
-
#initialize(workbook, name) ⇒ SheetBuilder
constructor
A new instance of SheetBuilder.
- #merge_array(arr1, arr2, offset) ⇒ Object
- #on_rows(range, opts = {style: nil}) ⇒ Object (also: #on_row)
Constructor Details
#initialize(workbook, name) ⇒ SheetBuilder
Returns a new instance of SheetBuilder.
6 7 8 9 10 11 12 |
# File 'lib/excel_walker/writer/sheet_builder.rb', line 6 def initialize(workbook, name) @workbook = workbook @name = name @sheet = @workbook.add_worksheet(:name => @name) @hooks = [] @max_rows = 0 end |
Instance Attribute Details
#sheet ⇒ Object (readonly)
Returns the value of attribute sheet.
4 5 6 |
# File 'lib/excel_walker/writer/sheet_builder.rb', line 4 def sheet @sheet end |
Instance Method Details
#build ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/excel_walker/writer/sheet_builder.rb', line 44 def build 1.upto(@max_rows) do |row_num| row, styles = [], [] @hooks.each do |hook| if hook.match?(row_num) cells = hook.run(row_num) merge_array(row, cells.data, hook.offset) merge_array(styles, cells.styles, hook.offset) end end @sheet.add_row row, style: styles end end |
#create_pane(x, y) ⇒ Object
18 19 20 21 22 23 24 25 26 |
# File 'lib/excel_walker/writer/sheet_builder.rb', line 18 def create_pane(x , y) @sheet.sheet_view.pane do |pane| pane.top_left_cell = "#{(64 + x).chr}#{y}" pane.state = :frozen_split pane.y_split = x - 1 pane.x_split = y - 1 pane.active_pane = :bottom_right end end |
#merge_array(arr1, arr2, offset) ⇒ Object
38 39 40 41 42 |
# File 'lib/excel_walker/writer/sheet_builder.rb', line 38 def merge_array(arr1, arr2, offset) offset.upto(arr2.length - 1 + offset).with_index do |offset_idx, idx| arr1[offset_idx] = arr2[idx] end end |
#on_rows(range, opts = {style: nil}) ⇒ Object Also known as: on_row
28 29 30 31 32 33 34 |
# File 'lib/excel_walker/writer/sheet_builder.rb', line 28 def on_rows(range, opts = {style: nil}) Hook.new(range).tap do |hook| hook.style = opts[:style] @max_rows = hook.max if hook.max > @max_rows @hooks << hook end end |