2011-11-23 10 views
10

Estoy creando algunas funciones del lado del cliente para una característica de exportación de hoja de cálculo que se pueda mapear.Convertir números en letras más allá del alfabeto de 26 caracteres

estoy usando jQuery para gestionar el orden de las columnas, pero cada columna se ordena como una hoja de cálculo Excel es decir ABCD E ...... XYZ AA AB AC publicidad, etc, etc

¿Cómo puedo generar un número como una letra? ¿Debo definir una matriz fija de valores? ¿O hay una forma dinámica de generar esto?

Respuesta

44

Creo que usted está buscando algo como esto

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

Impresionante que funciona a la perfección. Gracias por todo ayuda! –

+2

Buena respuesta, pero me hubiera gustado haber visto una explicación detrás de esto. Cosas como 97 representa una pequeña 'a', etc. – donnapep

1

Puede usar un código como este, suponiendo que numbers contiene los números de sus columnas. Así que después de este código que obtendrá los nombres de cadena para sus columnas:

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

Gracias por eso. Eso funciona muy bien, pero no comienza con un solo carácter, es decir, a, b, c, d .... x, y, z, aa, ab, ac? –

+0

He actualizado mi respuesta anterior :) ahora debería funcionar bien :) – haynar

Cuestiones relacionadas