Nella mia griglia le intestazioni delle colonne sono denominate A,B,C...,AA,AB,AC,...
ecc. Come un foglio di calcolo Excel. Come posso convertire la stringa in numero come: A => 1, B => 2, AA => 27
Converti alfabeto colonna excel (ad esempio AA) in numero (ad es. 25)
risposta
Prova:
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]
grazie amico ... grazie mille .. –
@JaisonJustus sei il benvenuto;) – Yoshi
ho appena scritto un deposito di rottami f @ # $ snippet ... bisogno di essere ottimizzato .. :)
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') => restituisce 1 e charToNum ('AA') => restituisce 27;
numToChar funziona bene, ma sembra che la tua funzione charToNum sia incompleta (e inefficiente). – mpen
@ Mark sì è solo una soluzione rapida. se possibile, puoi ottimizzare il codice e pubblicare una risposta migliore. Grazie in anticipo –
Ecco un rapido esempio del codice è necessario implementare. Funzionerà con qualsiasi numero di lettere specificato.
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
soluzione 1: migliore compatibilità prestazioni e il browser
// 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;
}
soluzione 2: codice corto (funzione freccia 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);
}
prova:
['A', 'Z', 'AA', 'AB', 'ZZ','BKTXHSOGHKKE'].map(lettersToNumber);
// [1, 26, 27, 28, 702, 9007199254740991]
lettersToNumber('AAA'); //703
Ho riscritto Yoshi's answer in una forma più dettagliata che spiega meglio come funziona ed è più facile da porta per altre lingue:
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. Converti ad es. 2012-05-25 a secondi dal 1 gennaio 1970
- 2. C++ Numero casuale da 1 a un numero molto elevato (ad esempio 25 milioni)
- 3. Stringhe di formato numero Excel (ad esempio "@", "$ -409] d-mmm-yy; @") - Disponibilità di riferimento completa?
- 4. Rails - Param con "punto" (ad es. /google.com)
- 5. Converti UNIX epoca ad oggetto Data
- 6. Excel vba - converti stringa in numero
- 7. Converti stringa Fino ad oggi in PHP
- 8. Posso incorporare librerie di sistema (ad es. Libxml2) per compilare una gemma (ad esempio nokogiri) che posso distribuire su Heroku?
- 9. PHPExcel Thousand Seperator per la Svizzera, ad es. 1'234'456
- 10. Buoni usi reali delle metaclassi (ad es. In Python)
- 11. Visualizzazione di unix color su windows cmd (ad es. ← [31m)
- 12. Differenza tra riflessione ComponentModel (ad esempio PropertyDescriptor) e riflessione standard (ad esempio PropertyInfo)?
- 13. Converti Stringa facoltativa fino ad oggi
- 14. Converti attributi XML ad elementi XSLT
- 15. Come convertire un numero decimale in tempo, ad es. HH: MM: SS
- 16. In che modo spray trova le risorse, ad es. javascript
- 17. gestione di caratteri speciali, ad es. accenti in R
- 18. Pathfinding in ambienti 3D reali (ad es. Edifici)
- 19. Localizzazione regionale iOS8 (ad esempio pt-BR)?
- 20. Come leggere i file .rej, ad esempio
- 21. scrittura ad un Excel file esistente
- 22. Wildcard Xpath (ad esempio: "/ Dati/Clienti/D *")
- 23. Utilizzare DefineProperties per sostituire le proprietà TPersistent, ad es. TFont
- 24. Leggere i parametri di avvio Java JVM (ad es. -Xmx)
- 25. perché namespace anteporre ::, ad esempio :: std :: vector
- 26. [rilascio CFNumber]: messaggio inviato ad esempio deallocato
- 27. contatto esterno (ad esempio facebook) su android
- 28. Come nascondere l'estensione (ad esempio .aspx) nell'URL?
- 29. Converti il numero scritto in numero in R
- 30. Come verificare l'input in UITextField (ad esempio, input numerico)
Una piccola correzione ... AA dovrebbe essere 27 –
non puoi semplicemente usare la posizione della colonna che desideri convertire come valore numerico? se AA è in 25a posizione, questa è la tua risposta ... – Yaniro
No, non c'è "snippet di codice per quello". Se sei bloccato a scriverne uno, mostraci quello che hai finora. A proposito, perché "AA" 25 e non 27? –