Class: ExcelWalker::Writer::SheetBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/excel_walker/writer/sheet_builder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#sheetObject (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

#buildObject



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