5

I'm trying to convert numbers to excel column letters.

Code:

def num2col(num):
    letters = ''
    while num:
        mod = num % 26
        num = num // 26
        letters += chr(mod + 64)
    return ''.join(reversed(letters))

print num2col(25), num2col(26), num2col(27)    
print num2col(51), num2col(52), num2col(53)
print num2col(77), num2col(78), num2col(79)

Desired output:

Y Z AA
AY AZ BA
BY BZ CA

Actual output:

Y A@ AA
AY B@ BA
BY C@ CA
falsetru
  • 357,413
  • 63
  • 732
  • 636
jason
  • 3,811
  • 18
  • 92
  • 147

1 Answers1

4
def num2col(num):
    letters = ''
    while num:
        num, mod = divmod(num-1, 26)
        letters += chr(mod + 65)      # 65 == ord('A')
    return ''.join(reversed(letters))

print num2col(25), num2col(26), num2col(27)    
print num2col(51), num2col(52), num2col(53)
print num2col(77), num2col(78), num2col(79)

output:

Y Z AA
AY AZ BA
BY BZ CA
falsetru
  • 357,413
  • 63
  • 732
  • 636
  • 1
    Thanks for the fix. I've used my original code for years, some how by luck column letter ending in 'Z' never showed up... til now... – jason Aug 04 '14 at 04:50