-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
71 lines (60 loc) · 1.81 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
var columnLetters = {
'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5,
'F': 6, 'G': 7, 'H': 8, 'I': 9, 'J': 10,
'K': 11, 'L': 12, 'M': 13, 'N': 14, 'O': 15,
'P': 16, 'Q': 17, 'R': 18, 'S': 19, 'T': 20,
'U': 21, 'V': 22, 'W': 23, 'X': 24, 'Y': 25,
'Z': 26
};
var firstLetterValue = columnLetters['A'],
lastLetterValue = columnLetters['Z'];
exports.toNumber = toColumnNumber;
exports.toIndex = toColumnIndex;
exports.toColumnName = toColumnName;
/**
* Convert column name to number
* @param {String} columnName Column name
* @return {Number} Column number
*/
function toColumnNumber(columnName) {
var letters = columnName.split('').reverse();
var columnIndex = 0;
if (letters.length === 1) {
var firstLetter = letters[0];
if (!columnLetters[firstLetter]) {
throw new Error('Invalid column letter');
}
columnIndex = columnLetters[firstLetter];
} else {
for (var i = 0; i < letters.length; i++) {
var letter = letters[i],
letterValue = columnLetters[letter];
if (!columnLetters[letter]) {
throw new Error('Invalid column letter');
}
var currentLetterValue = (letterValue * lastLetterValue * i);
if (i === 0) {
currentLetterValue += letterValue;
}
columnIndex += currentLetterValue;
}
}
return columnIndex;
}
/**
* Convert column name to column index (0 based)
* @param {String} columnName Column name
* @return {Number} Column index
*/
function toColumnIndex(columnName) {
var columnNumber = toColumnNumber(columnName);
return --columnNumber;
}
/**
* Convert column index to name (27 => AA)
* @param {Number} columnIndex Column index
* @return {String} Column name
*/
function toColumnName(columnIndex) {
throw new Error('Not implemented');
}