module Rrxcell::Addressing

Constants

ALPHABET_CHARCTORS

Public Class Methods

cell_address_to_column_position(cell_address) click to toggle source
# File lib/rrxcell/addressing.rb, line 5
def cell_address_to_column_position(cell_address)
  v = 0
  factor = 1
  
  column_string(cell_address).reverse.each_char do |char|
    _v = char.downcase.ord - "a".ord + 1
    v += ((_v * factor) - 1)
    factor += ALPHABET_CHARCTORS
  end

  v
end
cell_address_to_row_column_position(cell_address) click to toggle source
# File lib/rrxcell/addressing.rb, line 18
def cell_address_to_row_column_position(cell_address)
  [
    cell_address_to_row_position(cell_address),
    cell_address_to_column_position(cell_address)
  ]
end
cell_address_to_row_position(cell_address) click to toggle source
# File lib/rrxcell/addressing.rb, line 25
def cell_address_to_row_position(cell_address)
  row_string(cell_address).to_i - 1
end
cell_address_to_sheet_position(cell_address, book = nil) click to toggle source
# File lib/rrxcell/addressing.rb, line 29
def cell_address_to_sheet_position(cell_address, book = nil)
  validate_book!(book)
  book.sheet_names.index(sheet_string(cell_address))
end
cell_address_to_sheet_row_column_position(cell_address, book = nil) click to toggle source
# File lib/rrxcell/addressing.rb, line 34
def cell_address_to_sheet_row_column_position(cell_address, book = nil)
  validate_book!(book)
  [
    cell_address_to_sheet_position(cell_address, book),
    cell_address_to_row_column_position(cell_address)
  ].flatten
end

Private Class Methods

column_string(cell_address) click to toggle source
# File lib/rrxcell/addressing.rb, line 44
def column_string(cell_address)
  validate_cell_address!(cell_address)
  cell_address.scan(/\!*([[:alpha:]]+)/).flatten.last
end
row_string(cell_address) click to toggle source
# File lib/rrxcell/addressing.rb, line 49
def row_string(cell_address)
  validate_cell_address!(cell_address)
  cell_address.match(/[0-9]+\z/).to_s
end
sheet_string(cell_address) click to toggle source
# File lib/rrxcell/addressing.rb, line 54
def sheet_string(cell_address)
  validate_cell_address!(cell_address)
  cell_address.scan(/\A(.+)\!/).flatten.first
end
validate_book!(book) click to toggle source
# File lib/rrxcell/addressing.rb, line 68
def validate_book!(book)
  raise "invalid Rrxcell::Book" unless book.is_a?(Rrxcell::Book)
  true
end
validate_cell_address!(cell_address) click to toggle source
# File lib/rrxcell/addressing.rb, line 59
def validate_cell_address!(cell_address)
  return true if cell_address.match(/\A[[:alpha:]]+[0-9]+\z/)
  
  unless cell_address.match(/\A.+\![[:alpha:]]+[0-9]+\z/)
    raise "invalid address" 
  end
  true
end