Sha256: 962ff2f854ca40cc1d69bdcb318ecca2924ce49fb907a4ac91946b3685c35739

Contents?: true

Size: 791 Bytes

Versions: 42

Compression:

Stored size: 791 Bytes

Contents

# -*- coding: utf-8 -*-
require 'singleton'

class ColName
  include Singleton

  def initialize
    @col_str_table = Hash.new
  end

  def col_str(col)
    @col_str_table[col] = col_str_build(col) unless @col_str_table[col]
    @col_str_table[col]
  end

  private

  def col_str_build(col)
    # Change from 0-indexed to 1 indexed.
    col = col.to_i + 1
    col_str = ''

    while col > 0
      # Set remainder from 1 .. 26
      remainder = col % 26
      remainder = 26 if remainder == 0

      # Convert the remainder to a character. C-ishly.
      col_letter = ("A".ord + remainder - 1).chr

      # Accumulate the column letters, right to left.
      col_str = col_letter + col_str

      # Get the next order of magnitude.
      col = (col - 1) / 26
    end

    col_str
  end
end

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
write_xlsx-1.09.4 lib/write_xlsx/col_name.rb
write_xlsx-1.09.3 lib/write_xlsx/col_name.rb
write_xlsx-1.09.2 lib/write_xlsx/col_name.rb
write_xlsx-1.09.1 lib/write_xlsx/col_name.rb
write_xlsx-1.09.0 lib/write_xlsx/col_name.rb
write_xlsx-1.08.2 lib/write_xlsx/col_name.rb
write_xlsx-1.08.1 lib/write_xlsx/col_name.rb
write_xlsx-1.08.0 lib/write_xlsx/col_name.rb
write_xlsx-1.07.0 lib/write_xlsx/col_name.rb
write_xlsx-1.04.0 lib/write_xlsx/col_name.rb
write_xlsx-1.02.0 lib/write_xlsx/col_name.rb
write_xlsx-1.01.0 lib/write_xlsx/col_name.rb
write_xlsx-1.00.0 lib/write_xlsx/col_name.rb
write_xlsx-0.99.0 lib/write_xlsx/col_name.rb
write_xlsx-0.97.0 lib/write_xlsx/col_name.rb
write_xlsx-0.90.0 lib/write_xlsx/col_name.rb
write_xlsx-0.89.0 lib/write_xlsx/col_name.rb
write_xlsx-0.88.0 lib/write_xlsx/col_name.rb
write_xlsx-0.87.0 lib/write_xlsx/col_name.rb
write_xlsx-0.86.0 lib/write_xlsx/col_name.rb