Class: ExcelAbstraction::Sheet

Inherits:
SimpleDelegator
  • Object
show all
Defined in:
lib/excel_templating/excel_abstraction/sheet.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sheet, workbook) ⇒ Sheet

Returns a new instance of Sheet.



5
6
7
8
9
# File 'lib/excel_templating/excel_abstraction/sheet.rb', line 5

def initialize(sheet, workbook)
  super(sheet)
  @workbook = workbook
  @active_cell_reference = ExcelAbstraction::ActiveCellReference.new
end

Instance Attribute Details

#active_cell_referenceObject (readonly)

Returns the value of attribute active_cell_reference.



3
4
5
# File 'lib/excel_templating/excel_abstraction/sheet.rb', line 3

def active_cell_reference
  @active_cell_reference
end

Instance Method Details

#cell(value, format: nil, type: :auto, **options) ⇒ Object

Fills the cell at the current pointer with the value and format or options specified

Parameters:

  • value (Object)

    Value to place in the cell.

  • options (Object)

    (optional) options to create a format object

  • format (Object) (defaults to: nil)

    (optional) The format to use when creating this cell



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/excel_templating/excel_abstraction/sheet.rb', line 25

def cell(value, format: nil, type: :auto, **options)
  format = format || _format(options)
  value = Float(value) if value.is_a?(ExcelAbstraction::Time) || value.is_a?(ExcelAbstraction::Date)

  writer = case type
           when :string then method(:write_string)
           else method(:write)
           end

  writer.call(active_cell_reference.row, active_cell_reference.col, value, format)

  if options[:new_row]
    next_row
  else
    active_cell_reference.right
  end
  self
end

#cells(array, **options) ⇒ Object



50
51
52
53
# File 'lib/excel_templating/excel_abstraction/sheet.rb', line 50

def cells(array, **options)
  Array(array).each { |value| cell(value, **options) }
  self
end

#header(value, **options) ⇒ Object



11
12
13
14
# File 'lib/excel_templating/excel_abstraction/sheet.rb', line 11

def header(value, **options)
  cell(value, **{bold: 1}.merge(options))
  self
end

#headers(array, options = {}) ⇒ Object



16
17
18
19
# File 'lib/excel_templating/excel_abstraction/sheet.rb', line 16

def headers(array, options = {})
  Array(array).each { |element| header(element, options) }
  self
end

#merge(length, value, options = {}) ⇒ Object



55
56
57
58
59
60
# File 'lib/excel_templating/excel_abstraction/sheet.rb', line 55

def merge(length, value, options = {})
  format = _format(options)
  merge_range(active_cell_reference.row, active_cell_reference.col, active_cell_reference.row, active_cell_reference.col + length, value, format)
  active_cell_reference.right(length + 1)
  self
end

#next_rowObject

Advance the pointer to the next row.

Returns:

  • nil



46
47
48
# File 'lib/excel_templating/excel_abstraction/sheet.rb', line 46

def next_row
  active_cell_reference.newline
end

#style_col(col, width: nil, format: {}, level: 0, collapse: 0, hidden: nil) ⇒ Object

Style the numbered column

Parameters:

  • col (Integer)

    0 based index of the column.

  • width (Integer) (defaults to: nil)

    numeric width of the column (30 = 2.6 inches)

  • format (Hash) (defaults to: {})

    Properties to set for the format of the column

  • level (Integer) (defaults to: 0)

    Outline level

  • collapse (Integer) (defaults to: 0)

    1 = collapse, 0 = do not collapse



81
82
83
84
85
86
87
88
# File 'lib/excel_templating/excel_abstraction/sheet.rb', line 81

def style_col(col, width: nil, format: {}, level: 0, collapse: 0, hidden: nil)
  format = _format(format || {})
  if level
    raise "Outline level can only be between 0 and 7" unless (0..7) === level
  end
  set_column(col, col, width, format, hidden, level, collapse)
  self
end

#style_row(row, properties = {}) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/excel_templating/excel_abstraction/sheet.rb', line 62

def style_row(row, properties = {})
  height = properties[:height]
  format = _format(properties[:format] || {})
  hidden = properties[:hidden] || 0
  outline_level = properties[:level] || 0
  if outline_level
    raise "Outline level can only be between 0 and 7" unless (0..7) === outline_level
  end
  collapse = properties[:collapse] || 0
  set_row(row, height, format, hidden, outline_level, collapse)
  self
end