JSFiddle - React, Tailwind, and code Playground
by Timar
JavaScript
const charMap = {
A: 1,
B: 2,
C: 3,
D: 4,
E: 5,
F: 6,
G: 7,
H: 8,
I: 9,
J: "A",
K: "B",
L: "C",
M: "D",
N: "E",
O: "F",
P: "G",
Q: "H",
R: "I",
S: "J",
T: "K",
U: "L",
V: "M",
W: "N",
X: "O",
Y: "P",
Z: "Q",
};
function columnToNumber(column){
const isDoubleDigit = column.length > 1
const map = charMap
const base25 = column.split('').map(char=> map[char]).join('')
//console.log(column,'base25:',base25)
const columnNumber = parseInt(base25, 26)
// on double digit columns reduce by 1
return columnNumber -1
}
function test(column, expected){
console.log(`Column:${column} = ${columnToNumber(column) == expected ? '✅' : '❌'}, result: ${columnToNumber(column)}, expected:${expected}`)
}
test('A', 0)
test('B', 1)
test('C', 2)
test('J', 9)
test('X', 23)
test('Y', 24)
test('Z', 25)
test('AA', 26)
test('AB', 27)
test('FF', 161)
test('YY', 674)
test('ZZ', 701)
test('ZA', 676)
// console.log(columnToNumber('YZ'), 'expecting:', 675)
// AA => 11
// AAA => 111
// Z => 10
// ZZ => 110
// AZ = > 20
// console.log(parseInt('P', 26), 'p', 25) // Y
// console.log(parseInt('10', 26), 'p', 26) // Z
// console.log(parseInt('11', 26), "AA",27) // AA
// console.log(parseInt('110', 26), 'ZZ', 702) // ZZ
// console.log(parseInt('20', 26), "AZ",52) // AA
// console.log(parseInt('30', 26), "BZ",78) // AA
// console.log(parseInt('B0', 26), "JZ",286) // AA
// console.log(parseInt('AB0', 26), "JZ",962) // AA