Class: RubyXL::Address
- Inherits:
-
Object
- Object
- RubyXL::Address
- Defined in:
- lib/rubyXL/address.rb
Constant Summary collapse
- ROW_REF_FORMAT =
/\A[1-9]\d*\z/
- COLUMN_REF_FORMAT =
/\A[A-Z]+\z/
Instance Attribute Summary collapse
Class Method Summary collapse
- .column_ind2ref(ind) ⇒ String
- .column_ref2ind(ref) ⇒ Integer
- .row_ind2ref(ind) ⇒ String
- .row_ref2ind(ref) ⇒ Integer
Instance Method Summary collapse
- #cell ⇒ RubyXL::Cell?
- #column(column = nil) ⇒ Integer, RubyXL::Address
- #column=(column) ⇒ Integer, ...
- #down(amount = 1) ⇒ RubyXL::Address
- #down!(amount = 1) ⇒ self
-
#initialize(worksheet, ref: nil, row: nil, column: nil) ⇒ Address
constructor
A new instance of Address.
- #inspect ⇒ String
- #left(amount = 1) ⇒ RubyXL::Address
- #left!(amount = 1) ⇒ self
- #ref ⇒ String
- #right(amount = 1) ⇒ RubyXL::Address
- #right!(amount = 1) ⇒ self
- #row(row = nil) ⇒ Integer, RubyXL::Address
- #row=(row) ⇒ Integer, ...
- #up(amount = 1) ⇒ RubyXL::Address
- #up!(amount = 1) ⇒ self
- #value ⇒ Object
- #value=(value) ⇒ Object
Constructor Details
#initialize(worksheet, ref: nil, row: nil, column: nil) ⇒ Address
Returns a new instance of Address.
78 79 80 81 82 83 84 |
# File 'lib/rubyXL/address.rb', line 78 def initialize(worksheet, ref: nil, row: nil, column: nil) @worksheet = worksheet row, column = RubyXL::Reference.ref2ind(ref) if ref self.row = row self.column = column end |
Instance Attribute Details
#worksheet(worksheet = nil) ⇒ RubyXL::Workbook, RubyXL::Address
88 89 90 91 92 93 94 |
# File 'lib/rubyXL/address.rb', line 88 def worksheet(worksheet = nil) if worksheet.nil? @worksheet else self.class.new(worksheet, row: @row, column: @column) end end |
Class Method Details
.column_ind2ref(ind) ⇒ String
21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/rubyXL/address.rb', line 21 def column_ind2ref(ind) validate_index(:column, ind) ref = ''.dup loop do ref.prepend((ind % 26 + 65).chr) ind = ind / 26 - 1 break if ind < 0 end ref.freeze end |
.column_ref2ind(ref) ⇒ Integer
44 45 46 47 48 49 |
# File 'lib/rubyXL/address.rb', line 44 def column_ref2ind(ref) = "invalid column #{ref.inspect}" raise ArgumentError, unless COLUMN_REF_FORMAT =~ ref ref.to_s.each_byte.reduce(0) { |a, e| a * 26 + (e - 64) } - 1 end |
.row_ind2ref(ind) ⇒ String
13 14 15 16 17 |
# File 'lib/rubyXL/address.rb', line 13 def row_ind2ref(ind) validate_index(:row, ind) (ind + 1).to_s.freeze end |
.row_ref2ind(ref) ⇒ Integer
35 36 37 38 39 40 |
# File 'lib/rubyXL/address.rb', line 35 def row_ref2ind(ref) = "invalid row #{ref.inspect}" raise ArgumentError, unless ROW_REF_FORMAT =~ ref ref.to_s.to_i - 1 end |
Instance Method Details
#cell ⇒ RubyXL::Cell?
191 192 193 |
# File 'lib/rubyXL/address.rb', line 191 def cell (row = @worksheet[@row]) && row[@column] end |
#column(column = nil) ⇒ Integer, RubyXL::Address
108 109 110 111 112 113 114 |
# File 'lib/rubyXL/address.rb', line 108 def column(column = nil) if column.nil? @column else self.class.new(@worksheet, row: @row, column: column) end end |
#column=(column) ⇒ Integer, ...
124 125 126 |
# File 'lib/rubyXL/address.rb', line 124 def column=(column) @column = self.class.__send__(:normalize, :column, column) end |
#down(amount = 1) ⇒ RubyXL::Address
146 147 148 |
# File 'lib/rubyXL/address.rb', line 146 def down(amount = 1) row(@row + amount) end |
#down!(amount = 1) ⇒ self
171 172 173 174 |
# File 'lib/rubyXL/address.rb', line 171 def down!(amount = 1) self.row += amount self end |
#inspect ⇒ String
134 135 136 |
# File 'lib/rubyXL/address.rb', line 134 def inspect format('#<%s %s!%s>', self.class.name, @worksheet.sheet_name, ref) end |
#left(amount = 1) ⇒ RubyXL::Address
152 153 154 |
# File 'lib/rubyXL/address.rb', line 152 def left(amount = 1) column(@column - amount) end |
#left!(amount = 1) ⇒ self
178 179 180 181 |
# File 'lib/rubyXL/address.rb', line 178 def left!(amount = 1) self.column -= amount self end |
#ref ⇒ String
129 130 131 |
# File 'lib/rubyXL/address.rb', line 129 def ref RubyXL::Reference.ind2ref(@row, @column) end |
#right(amount = 1) ⇒ RubyXL::Address
158 159 160 |
# File 'lib/rubyXL/address.rb', line 158 def right(amount = 1) column(@column + amount) end |
#right!(amount = 1) ⇒ self
185 186 187 188 |
# File 'lib/rubyXL/address.rb', line 185 def right!(amount = 1) self.column += amount self end |
#row(row = nil) ⇒ Integer, RubyXL::Address
98 99 100 101 102 103 104 |
# File 'lib/rubyXL/address.rb', line 98 def row(row = nil) if row.nil? @row else self.class.new(@worksheet, row: row, column: @column) end end |
#row=(row) ⇒ Integer, ...
118 119 120 |
# File 'lib/rubyXL/address.rb', line 118 def row=(row) @row = self.class.__send__(:normalize, :row, row) end |
#up(amount = 1) ⇒ RubyXL::Address
140 141 142 |
# File 'lib/rubyXL/address.rb', line 140 def up(amount = 1) row(@row - amount) end |
#up!(amount = 1) ⇒ self
164 165 166 167 |
# File 'lib/rubyXL/address.rb', line 164 def up!(amount = 1) self.row -= amount self end |
#value ⇒ Object
196 197 198 |
# File 'lib/rubyXL/address.rb', line 196 def value cell && cell.value end |
#value=(value) ⇒ Object
202 203 204 205 206 207 208 |
# File 'lib/rubyXL/address.rb', line 202 def value=(value) if cell cell.change_contents(value) else @worksheet.add_cell(@row, @column, value) end end |