Class: ExcelTemplating::Document::Sheet

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

Overview

Define a sheet on a document

Examples:

sheet 1 do
  repeat_row 17, with: :people
end

Defined Under Namespace

Classes: RepeatedRow

Instance Method Summary collapse

Constructor Details

#initialize(sheet_number) ⇒ Sheet

Returns a new instance of Sheet.

Parameters:

  • sheet_number (Integer)


9
10
11
12
13
# File 'lib/excel_templating/document/sheet.rb', line 9

def initialize(sheet_number)
  @sheet_number = sheet_number
  @repeated_rows = {}
  @validated_cells = {}
end

Instance Method Details

#column_stylesObject



67
68
69
# File 'lib/excel_templating/document/sheet.rb', line 67

def column_styles
  @column_styles || {}
end

#default_column_styleObject

Non DSL Methods ###



63
64
65
# File 'lib/excel_templating/document/sheet.rb', line 63

def default_column_style
  @default_column_style || {}
end

#default_row_styleObject



71
72
73
# File 'lib/excel_templating/document/sheet.rb', line 71

def default_row_style
  @default_row_style || {}
end

#each_row_at(row_number, sheet_data) ⇒ Object

Repeat each row of the data if it is repeated, yielding each item in succession.

Parameters:

  • row_number (Integer)
  • sheet_data (Hash)

    Data for this sheet



109
110
111
112
113
114
115
116
117
118
119
# File 'lib/excel_templating/document/sheet.rb', line 109

def each_row_at(row_number, sheet_data)
  if repeated_row?(row_number)
    repeater = repeated_rows[row_number]
    verify_array!(sheet_data, repeater.data_attribute)
    sheet_data[repeater.data_attribute].each_with_index do |row_data, index|
      yield({ index: index }.merge(row_data).merge(sheet_data))
    end
  else
    yield sheet_data
  end
end

#inches(decimal_inches) ⇒ Float

Returns inches converted to excel integer size.

Parameters:

  • decimal_inches (Float)

Returns:

  • (Float)

    inches converted to excel integer size.



19
20
21
22
23
# File 'lib/excel_templating/document/sheet.rb', line 19

def inches(decimal_inches)
  # empirically determined number. 30.0 seems to be the measurement for 2.6 inches
  # in open office.
  (30.0 / 2.6) * decimal_inches
end

#repeat_row(row_number, with:, &block) ⇒ Object

Repeat a numbered row in the template using an array from the data will result in expanding the produced excel document by a number of rows. it is expected that the sheet specific data will contain :with as an Array.

Examples:

repeat_row 17, with: :employee_data

Parameters:

  • row_number (Integer)
  • with (Symbol)


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

def repeat_row(row_number, with:, &block)
  repeated_rows[row_number] = RepeatedRow.new(row_number, with)
  repeated_rows[row_number].instance_eval(&block) if block_given?
end

#repeated_row?(row_number) ⇒ Boolean

Parameters:

  • row_number (Integer)

Returns:

  • (Boolean)


84
85
86
# File 'lib/excel_templating/document/sheet.rb', line 84

def repeated_row?(row_number)
  repeated_rows.has_key?(row_number)
end

#row_stylesObject



75
76
77
# File 'lib/excel_templating/document/sheet.rb', line 75

def row_styles
  @row_styles || {}
end

#sheet_data(data) ⇒ Object



79
80
81
# File 'lib/excel_templating/document/sheet.rb', line 79

def sheet_data(data)
  data[sheet_number] || {}
end

#style_columns(default:, columns: {}) ⇒ Object

Parameters:

  • default (Hash)

    default styling for all columns.

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

    specific styling for numbered columns.



27
28
29
30
# File 'lib/excel_templating/document/sheet.rb', line 27

def style_columns(default:, columns: {})
  @default_column_style = default
  @column_styles = columns
end

#style_rows(default:, rows: {}) ⇒ Object

Parameters:

  • default (Hash)

    default styling for all rows.

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

    specific styling for numbered rows.



34
35
36
37
# File 'lib/excel_templating/document/sheet.rb', line 34

def style_rows(default:, rows: {})
  @default_row_style = default
  @row_styles = rows
end

#validate_cell(row:, column:, with:) ⇒ Object

Validate a particular cell using a declared data source

Examples:

validate_cell row: 1, column :5, with: :valid_foos

Parameters:

  • row (Integer)
  • column (Integer)
  • with (Symbol)


57
58
59
# File 'lib/excel_templating/document/sheet.rb', line 57

def validate_cell(row:, column:, with:)
  validated_cells["#{row}:#{column}"] = with
end

#validated_cell?(row_number, column_number) ⇒ Boolean

Parameters:

  • row_number (Integer)
  • column_number (Integer)

Returns:

  • (Boolean)


90
91
92
93
# File 'lib/excel_templating/document/sheet.rb', line 90

def validated_cell?(row_number, column_number)
  (repeated_row?(row_number) && repeated_rows[row_number].validated_column?(column_number)) ||
    validated_cells.has_key?("#{row_number}:#{column_number}")
end

#validation_source_name(row_number, column_number) ⇒ Symbol

Returns The registered symbol for that row & column or Nil.

Parameters:

  • row_number (Integer)
  • column_number (Integer)

Returns:

  • (Symbol)

    The registered symbol for that row & column or Nil



98
99
100
101
102
103
104
# File 'lib/excel_templating/document/sheet.rb', line 98

def validation_source_name(row_number, column_number)
  if repeated_row?(row_number)
    repeated_rows[row_number].validated_column_source(column_number)
  else
    validated_cells["#{row_number}:#{column_number}"]
  end
end