Module: RubyExcel::Address
Instance Method Summary collapse
- #address_to_col_index(address) ⇒ Object
- #address_to_indices(address) ⇒ Object
- #col_index(letter) ⇒ Object
- #col_letter(index) ⇒ Object
- #column_id(address) ⇒ Object
- #expand(address) ⇒ Object
- #indices_to_address(row_idx, column_idx) ⇒ Object
- #multi_array?(obj) ⇒ Boolean
- #offset(address, row, col) ⇒ Object
- #row_id(address) ⇒ Object
- #to_range_address(obj1, obj2) ⇒ Object
Instance Method Details
#address_to_col_index(address) ⇒ Object
5 6 7 |
# File 'lib/rubyexcel/address.rb', line 5 def address_to_col_index( address ) col_index( column_id( address ) ) end |
#address_to_indices(address) ⇒ Object
9 10 11 |
# File 'lib/rubyexcel/address.rb', line 9 def address_to_indices( address ) [ row_id( address ), address_to_col_index( address ) ] end |
#col_index(letter) ⇒ Object
13 14 15 16 17 18 |
# File 'lib/rubyexcel/address.rb', line 13 def col_index( letter ) return letter if letter.is_a? Fixnum letter !~ /[^A-Z]/ && [1,2,3].include?( letter.length ) or fail ArgumentError, "Invalid column reference: #{ letter }" idx, a = 1, 'A' loop { return idx if a == letter; idx+=1; a.next! } end |
#col_letter(index) ⇒ Object
20 21 22 23 24 |
# File 'lib/rubyexcel/address.rb', line 20 def col_letter( index ) return index if index.is_a? String index > 0 or fail ArgumentError, 'Indexing is 1-based' a = 'A'; ( index - 1 ).times { a.next! }; a end |
#column_id(address) ⇒ Object
26 27 28 |
# File 'lib/rubyexcel/address.rb', line 26 def column_id( address ) address[/[A-Z]+/] end |
#expand(address) ⇒ Object
30 31 32 33 34 35 |
# File 'lib/rubyexcel/address.rb', line 30 def ( address ) return [[address]] unless address.include? ':' address.upcase.match( /([A-Z]+)(\d+):([A-Z]+)(\d+)/i ) start_col, end_col, start_row, end_row = [ $1, $3 ].sort + [ $2.to_i, $4.to_i ].sort ( start_row..end_row ).map { |r| ( start_col..end_col ).map { |c| c + r.to_s } } end |
#indices_to_address(row_idx, column_idx) ⇒ Object
37 38 39 40 |
# File 'lib/rubyexcel/address.rb', line 37 def indices_to_address( row_idx, column_idx ) [ row_idx, column_idx ].all? { |a| a.is_a?( Fixnum ) } or fail ArgumentError, 'Input must be Fixnum' col_letter( column_idx ) + row_idx.to_s end |
#multi_array?(obj) ⇒ Boolean
42 43 44 |
# File 'lib/rubyexcel/address.rb', line 42 def multi_array?( obj ) obj.all? { |el| el.is_a?( Array ) } && obj.is_a?( Array ) rescue false end |
#offset(address, row, col) ⇒ Object
46 47 48 |
# File 'lib/rubyexcel/address.rb', line 46 def offset(address, row, col) ( col_letter( address_to_col_index( address ) + col ) ) + ( row_id( address ) + row ).to_s end |
#row_id(address) ⇒ Object
58 59 60 |
# File 'lib/rubyexcel/address.rb', line 58 def row_id( address ) address[/\d+/].to_i end |
#to_range_address(obj1, obj2) ⇒ Object
50 51 52 53 54 55 56 |
# File 'lib/rubyexcel/address.rb', line 50 def to_range_address( obj1, obj2 ) if obj2 obj2.is_a?( String ) ? ( obj1 + ':' + obj2 ) : "#{ obj1.address }:#{ obj2.address }" else obj1.is_a?( String ) ? obj1 : obj1.address end end |