在我的網格中,列標題被命名爲A,B,C...,AA,AB,AC,...
等,就像excel電子表格一樣。我如何可以轉換字符串數字,如:A => 1, B => 2, AA => 27
將excel列字母(例如AA)轉換爲數字(例如25)
回答
嘗試:
var foo = function(val) {
var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', i, j, result = 0;
for (i = 0, j = val.length - 1; i < val.length; i += 1, j -= 1) {
result += Math.pow(base.length, j) * (base.indexOf(val[i]) + 1);
}
return result;
};
console.log(['A', 'AA', 'AB', 'ZZ'].map(foo)); // [1, 27, 28, 702]
謝謝你的男人...非常感謝你.. – 2012-03-28 11:09:06
@JaisonJustus不客氣;) – Yoshi 2012-03-28 11:12:49
我只是寫了一個垃圾場˚[email protected]#$片斷......需要優化.. :)
charToNum = function(alpha) {
var index = 0
for(var i = 0, j = 1; i < j; i++, j++) {
if(alpha == numToChar(i)) {
index = i;
j = i;
}
}
console.log(index);
}
numToChar = function(number) {
var numeric = (number - 1) % 26;
var letter = chr(65 + numeric);
var number2 = parseInt((number - 1)/26);
if (number2 > 0) {
return numToChar(number2) + letter;
} else {
return letter;
}
}
chr = function (codePt) {
if (codePt > 0xFFFF) {
codePt -= 0x10000;
return String.fromCharCode(0xD800 + (codePt >> 10), 0xDC00 + (codePt & 0x3FF));
}
return String.fromCharCode(codePt);
}
charToNum( 'A' )=>返回1,charToNum('AA')=>返回27;
numToChar很好地工作,但它看起來像你的charToNum函數是不完整的(和低效率)。 – mpen 2015-03-10 02:46:26
@馬克是它只是一個快速的解決方法。如果可能的話,你可以優化代碼併發布更好的答案。在此先感謝 – 2015-03-17 13:12:52
下面是你應該實現代碼的一個簡單的例子。 這將適用於任何給定數量的字母。
function letterToNumbers(string) {
string = string.toUpperCase();
var letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', sum = 0, i;
for (i = 0; i < string.length; i++) {
sum += Math.pow(letters.length, i) * (letters.indexOf(string.substr(((i + 1) * -1), 1)) + 1);
}
return sum;
}
Public Function ColLet2Num(Letras As String)
'RALONSO MAYO 2017
'A-> 1
'OQ ->407
'XFD->16384
Dim UnChar As String
Dim NAsc As Long
Dim F As Long
Dim Acum As Long
Dim Indice As Long
Letras = UCase(Letras)
Acum = 0
Indice = 0
For F = Len(Letras) - 1 To 0 Step -1
UnChar = Mid(Letras, F + 1, 1)
NAsc = Asc(UnChar) - 64
Acum = Acum + (NAsc * (26^Indice))
Indice = Indice + 1
Next
If Acum > 16384 Then
MsgBox "La celda máxima es la XFD->16384", vbCritical
End If
ColLet2Num = Acum
End Function
溶液1:最佳的性能和瀏覽器兼容性
// convert A to 1, Z to 26, AA to 27
function lettersToNumber(letters){
var chrs = ' ABCDEFGHIJKLMNOPQRSTUVWXYZ', mode = chrs.length - 1, number = 0;
for(var p = 0; p < letters.length; p++){
number = number * mode + chrs.indexOf(letters[p]);
}
return number;
}
溶液2:短碼(ES6箭頭功能)
// convert A to 1, Z to 26, AA to 27
function lettersToNumber(letters){
return letters.split('').reduce((r, a) => r * 26 + parseInt(a, 36) - 9, 0);
}
測試:
['A', 'Z', 'AA', 'AB', 'ZZ','BKTXHSOGHKKE'].map(lettersToNumber);
// [1, 26, 27, 28, 702, 9007199254740991]
lettersToNumber('AAA'); //703
我在一個更詳細的形式,解釋好它是如何工作的,並更容易移植到其他語言重寫了Yoshi's answer:
var foo = function(val) {
var base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var baseNumber = base.length;
var runningTotal = 0;
var characterIndex = 0;
var indexExponent = val.length - 1;
while(characterIndex < val.length){
var digit = val[characterIndex];
var digitValue = base.indexOf(digit) + 1;
runningTotal += Math.pow(baseNumber, indexExponent) * digitValue;
characterIndex += 1
indexExponent -= 1
}
return runningTotal;
};
console.log(['A', 'AA', 'AB', 'ZZ'].map(foo)); // [1, 27, 28, 702]
- 1. NSString - 將數字(例如「ONE」)轉換爲數字(例如「1」)
- 2. 將Excel或Excel表格列的字母轉換爲Pythonic風格的數字
- 3. 將excel列字母轉換爲Ruby中的整數
- 4. 如何將字節轉換爲字符,例如1 - >'1'?
- 5. 將字母轉換爲相應數字
- 6. 將字母轉換爲數字
- 7. 將數字轉換爲字母組合
- 8. 將數字轉換爲字母javascript
- 9. 將數字轉換爲字母
- 10. 將數字轉換爲字母
- 11. 將一串字母轉換爲數字
- 12. 如何將數字替換爲字母
- 13. 如何將數字轉換爲字符串(字母)在PHP?
- 14. 如何將字符串中的字母轉換爲數字 - C++
- 15. 整型轉換爲Excel列(字母或字母組合) - 完整的例子PHP,單元測試和解釋
- 16. 將Pi轉換爲字母?
- 17. 將字符串轉換爲數學運算(例如:「+ 2.days」)
- 18. JavaScript:將數字轉換爲文本(例如18 - >「18」)
- 19. 如何將字節數組轉換爲位圖實例(.NET)?
- 20. 如何將數字轉換在PHP,例如1.905e + 06將會1905000
- 21. Excel:如何將數字轉換爲數字位數。 (111 - > 3)
- 22. Excel - 將列號轉換爲字母equivlent vbs
- 23. 將Excel公式轉換爲SQL案例
- 24. 如何將數字鍵盤轉換爲普通/字母鍵盤
- 25. 如何將數字轉換爲PHP中的字母?
- 26. 如何使用switch case語句將字母轉換爲數字
- 27. 如何使用python將字母轉換爲數字
- 28. 如何在C++中將數字轉換爲字母
- 29. 如何將字母代碼轉換爲數字?
- 30. 如何將android資源int轉換爲字符串。例如:android.R.string.cancel?
一個小幅盤整... AA應在27 – 2012-03-28 10:25:05
你就不能使用位置您希望將其轉換爲其數值的列?如果AA處於第25位,那就是你的答案...... – Yaniro 2012-03-28 10:25:49
不,沒有「沒有代碼片段」。如果你寫了一本,告訴我們你到目前爲止有什麼。順便說一句,爲什麼'AA'25而不是27? – 2012-03-28 10:26:12