Excel column numbers to letters



Hi everybody.

I'm trying to write a procedure to convert a column number (integer) to an Excel column name. I think I'm almost there but the procedure degenerates when the column names go to multiple letters (AA, BA, etc.).

Here's what I have so far:

proc _columnNumberToLetter {columnNumber} {
set listLetters [list A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
if {$columnNumber <= 26} {
set columnLetter [lindex $listLetters [expr $columnNumber - 1]]
} else {
set tickOver [expr int($columnNumber / 26)]
set remainder [expr $columnNumber - ($tickOver * 26)]
if {$tickOver <= 26} {
append columnLetter [lindex $listLetters [expr $tickOver - 1]]
if {$remainder == 0} {
append columnLetter "Z"
} else {
append columnLetter [lindex $listLetters [expr $remainder - 1]]
}
}
}
return $columnLetter
}

As I said, it's 'mostly' working. :) So if I pass the procedure a value of 1, it'll return 'A'. A value of 26 returns 'Z'. However, a value of 52 returns 'BZ' when it should be 'AZ'.

I'm sure I'm missing something obvious. I seem to think that I'll need to recurse the procedure to handle all possible numbers. I'd greatly appreciate anybody's help.

CJ
.