2011-11-23 17 views
10

Sto creando alcune funzioni lato client per una funzione di esportazione del foglio di lavoro mappabile.Converti i numeri in lettere oltre l'alfabeto di 26 caratteri

sto usando jQuery per gestire il criterio di ordinamento delle colonne, ma ogni colonna è ordinata come un foglio di calcolo Excel per esempio abcd e ...... xyz AA AB AC AD etc etc

Come posso generare un numero come una lettera? Devo definire un array di valori fisso? O c'è un modo dinamico per generare questo?

risposta

44

Penso che siete in cerca di qualcosa di simile

function colName(n) { 
 
     var ordA = 'a'.charCodeAt(0); 
 
     var ordZ = 'z'.charCodeAt(0); 
 
     var len = ordZ - ordA + 1; 
 
     
 
     var s = ""; 
 
     while(n >= 0) { 
 
      s = String.fromCharCode(n % len + ordA) + s; 
 
      n = Math.floor(n/len) - 1; 
 
     } 
 
     return s; 
 
    } 
 

 
// Example: 
 

 
    for(n = 0; n < 125; n++) 
 
      document.write(n + ":" + colName(n) + "<br>");

+0

Impressionante che funzioni perfettamente. Grazie per l'aiuto di tutti! –

+2

Buona risposta, ma mi sarebbe piaciuto aver visto una spiegazione dietro di esso. Cose come 97 rappresentano piccole "a" ecc. – donnapep

1

È possibile utilizzare un codice come questo, assumendo che numbers contenga i numeri delle colonne. Così, dopo questo codice otterrai i nomi di stringa per le colonne:

var letters = ['a', 'b', 'c', ..., 'z']; 
var numbers = [1, 2, 3, ...]; 
var columnNames = []; 
for(var i=0;i<numbers.length;i++) { 
    var firstLetter = parseInt(i/letters.length) == 0 ? '' : letters[parseInt(i/letters.length)]; 
    var secondLetter = letters[i%letters.length-1]; 
    columnNames.push(firstLetter + secondLetter); 
} 
+0

Grazie per questo. Funziona alla grande ma non inizia con un singolo carattere, cioè a, b, c, d .... x, y, z, aa, ab, ac? –

+0

Ho aggiornato la mia risposta sopra :) ora dovrebbe funzionare bene :) – haynar

Problemi correlati