An integer represents the column number of an Excel sheet. Assume that you want to transform the number into a string (title).
Example:
terminalColumn: 1 => A Column: 27 => AA Column: 53 => BA
Let's represent the alphabet using an array:
javascriptlet alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
Notice that the last letter of an Excel column string always follows the ABCDE...Z
sequence.
Use a module function to get it:
javascriptlet lastChar = alphabet[(columnNumber - 1) % 26]
If columnNumber
is greater than 26, notice that for a complete alphabet iteration, a new letter appears or the previous one increases one position:
terminal// 1 iteration(s) => A̳A // 2 iteration(s) => B̳A // 3 iteration(s) => C̳A // 4 iteration(s) => D̳A // ... // 26 iteration(s) => Z̳A // 27 iteration(s) => AA̳A // 28 iteration(s) => AB̳A
The number of iterations points to a letter in the alphabet. Prepend this letter to the title:
javascriptvar convertToTitle = function(columnNumber) { let alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' let lastChar = '' let title = '' while(columnNumber){ lastChar = alphabet[(columnNumber - 1) % 26] // Every 1 complete iteration, there is a new letter or an upgrade of the previous one // The number of iterations points to the letter in the alphabet // 0 iteration(s) => A 1 // 1 iteration(s) => AA 27 // 2 iteration(s) => BA 53 // 3 iteration(s) => CA 79 // 4 iteration(s) => DA 105 // ... // 26 iteration(s) => ZA 677 columnNumber = Math.floor((columnNumber - 1) / 26) title = lastChar + title } return title }
And here is the solution the other way round:
javascriptvar titleToNumber = function(columnTitle) { let alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' let lastChar = columnTitle[columnTitle.length - 1] let columnNumber = alphabet.indexOf(lastChar) + 1 for(var i = 1, iterations = 0; i < columnTitle.length; i ++){ lastChar = columnTitle[columnTitle.length - (i + 1)] // AA => 1 iteration(s) // BA => 2 iteration(s) // AAA => 27 iteration(s) // BAA => 53 iteration(s) // CAA => 79 iteration(s) // ZAA => 677 iteration(s) // AAAA => 703 iteration(s) iterations += (alphabet.indexOf(lastChar) + 1) * (26 ** (i - 1)) } columnNumber += iterations * 26 return columnNumber }
Hi, I'm Erik, an engineer from Barcelona. If you like the post or have any comments, say hi.