Class: RubyFromExcel::Area
Instance Attribute Summary collapse
#sheet
Instance Method Summary
collapse
Constructor Details
#initialize(sheet, start_cell, end_cell) ⇒ Area
Returns a new instance of Area.
30
31
32
33
34
|
# File 'lib/formulae/run/excel_range.rb', line 30
def initialize(sheet, start_cell,end_cell)
self.sheet = sheet
self.start_cell = Reference.new(start_cell)
self.end_cell = Reference.new(end_cell)
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
159
160
161
162
163
|
# File 'lib/formulae/run/excel_range.rb', line 159
def method_missing(method,*args,&block)
super unless start_cell.to_s == end_cell.to_s
super unless value_at(start_cell).respond_to?(method)
value_at(start_cell).send(method,*args,&block)
end
|
Instance Attribute Details
#end_cell ⇒ Object
Returns the value of attribute end_cell.
28
29
30
|
# File 'lib/formulae/run/excel_range.rb', line 28
def end_cell
@end_cell
end
|
#start_cell ⇒ Object
Returns the value of attribute start_cell.
28
29
30
|
# File 'lib/formulae/run/excel_range.rb', line 28
def start_cell
@start_cell
end
|
Instance Method Details
69
70
71
72
73
74
75
|
# File 'lib/formulae/run/excel_range.rb', line 69
def array_formula_index(row_index,column_index)
column_index = 0 if single_column?
row_index = 0 if single_row?
reference = start_cell.shift([row_index,column_index])
return :ref unless include?(reference)
reference
end
|
65
66
67
|
# File 'lib/formulae/run/excel_range.rb', line 65
def array_formula_offset(row_index,column_index)
value_at array_formula_index(row_index,column_index).to_ruby
end
|
#column(index) ⇒ Object
index = 0 for first column
47
48
49
50
|
# File 'lib/formulae/run/excel_range.rb', line 47
def column(index) column_number = start_cell.column_number + index
Area.new(sheet,Reference.ruby_for(column_number,start_cell.row_number),Reference.ruby_for(column_number,end_cell.row_number))
end
|
#dependencies ⇒ Object
94
95
96
97
98
99
100
101
|
# File 'lib/formulae/run/excel_range.rb', line 94
def dependencies
@dependencies ||=
(start_cell.row_number..end_cell.row_number).map do |row|
(start_cell.column_number..end_cell.column_number).map do |column_number|
Reference.ruby_for(column_number,row,sheet)
end
end.flatten
end
|
#each(&block) ⇒ Object
77
78
79
80
81
82
83
84
|
# File 'lib/formulae/run/excel_range.rb', line 77
def each(&block)
return @array.each(&block) if @array
start_cell.row_number.upto(end_cell.row_number) do |row|
start_cell.column_number.upto(end_cell.column_number) do |column_number|
yield value_at(Reference.ruby_for(column_number,row))
end
end
end
|
#include?(reference) ⇒ Boolean
151
152
153
154
155
156
157
|
# File 'lib/formulae/run/excel_range.rb', line 151
def include?(reference)
return false unless reference.column_number >= start_cell.column_number
return false unless reference.column_number <= end_cell.column_number
return false unless reference.row_number >= start_cell.row_number
return false unless reference.row_number <= end_cell.row_number
true
end
|
#include_cell?(cell) ⇒ Boolean
141
142
143
144
|
# File 'lib/formulae/run/excel_range.rb', line 141
def include_cell?(cell)
return false unless cell.worksheet == sheet
include?(cell.reference)
end
|
#index(row_number, column_number) ⇒ Object
52
53
54
55
56
|
# File 'lib/formulae/run/excel_range.rb', line 52
def index(row_number,column_number) reference = index_reference(row_number,column_number)
return reference if reference.is_a?(Symbol)
value_at(reference.to_ruby)
end
|
#index_reference(row_number, column_number) ⇒ Object
58
59
60
61
62
63
|
# File 'lib/formulae/run/excel_range.rb', line 58
def index_reference(row_number,column_number)
ref = array_formula_index(row_number-1, column_number-1)
return ref if ref.is_a?(Symbol)
ref.worksheet = sheet
ref
end
|
#row(index) ⇒ Object
36
37
38
39
|
# File 'lib/formulae/run/excel_range.rb', line 36
def row(index) row_number = row_number_for_index(index)
Area.new(sheet,"#{start_cell.column}#{row_number}","#{end_cell.column}#{row_number}")
end
|
#row_number_for_index(index) ⇒ Object
146
147
148
149
|
# File 'lib/formulae/run/excel_range.rb', line 146
def row_number_for_index(index)
return (end_cell.row_number + 1 + index) if index < 0
row_number = start_cell.row_number + index
end
|
#rows(start_index, end_index) ⇒ Object
41
42
43
44
45
|
# File 'lib/formulae/run/excel_range.rb', line 41
def rows(start_index, end_index)
start_row_number = row_number_for_index(start_index)
end_row_number = row_number_for_index(end_index)
Area.new(sheet,"#{start_cell.column}#{start_row_number}","#{end_cell.column}#{end_row_number}")
end
|
#single_column? ⇒ Boolean
129
130
131
|
# File 'lib/formulae/run/excel_range.rb', line 129
def single_column?
start_cell.column == end_cell.column
end
|
#single_row? ⇒ Boolean
133
134
135
|
# File 'lib/formulae/run/excel_range.rb', line 133
def single_row?
start_cell.row_number == end_cell.row_number
end
|
#single_row_or_column? ⇒ Boolean
125
126
127
|
# File 'lib/formulae/run/excel_range.rb', line 125
def single_row_or_column?
single_row? || single_column?
end
|
#to_a ⇒ Object
def to_enum
to_reference_enum.map {|reference| value_at reference}
end
90
91
92
|
# File 'lib/formulae/run/excel_range.rb', line 90
def to_a
@array ||= self.map {|v| v }
end
|
#to_excel_matrix ⇒ Object
113
114
115
|
# File 'lib/formulae/run/excel_range.rb', line 113
def to_excel_matrix
ExcelMatrix.new(to_grid)
end
|
#to_grid ⇒ Object
117
118
119
120
121
122
123
|
# File 'lib/formulae/run/excel_range.rb', line 117
def to_grid
(start_cell.row_number..end_cell.row_number).map do |row|
(start_cell.column_number..end_cell.column_number).map do |column_number|
value_at(Reference.ruby_for(column_number,row))
end
end
end
|
#to_reference_enum ⇒ Object
103
104
105
106
107
108
109
110
111
|
# File 'lib/formulae/run/excel_range.rb', line 103
def to_reference_enum
Enumerator.new do |yielder|
start_cell.row_number.upto(end_cell.row_number) do |row|
start_cell.column_number.upto(end_cell.column_number) do |column_number|
yielder << Reference.ruby_for(column_number,row)
end
end
end
end
|
#to_s ⇒ Object
137
138
139
|
# File 'lib/formulae/run/excel_range.rb', line 137
def to_s
"#{sheet}.a('#{start_cell.to_ruby}','#{end_cell.to_ruby}')"
end
|