Convertir el índice de la columna en la letra de la columna correspondiente

Resuelto BeNdErR asked hace 10 años • 24 respuestas

Necesito convertir un índice de columna de una hoja de cálculo de Google en su valor de letra correspondiente, por ejemplo, dada una hoja de cálculo:

ingrese la descripción de la imagen aquí

Necesito hacer esto (esta función obviamente no existe, es un ejemplo):

getColumnLetterByIndex(4);  // this should return "D"
getColumnLetterByIndex(1);  // this should return "A"
getColumnLetterByIndex(6);  // this should return "F"

Ahora bien, no recuerdo exactamente si el índice comienza desde 0o desde1 , de todos modos el concepto debe quedar claro.

No encontré nada sobre esto en la documentación del gas. ¿Estoy ciego? ¿Alguna idea?

Gracias

BeNdErR avatar Jan 20 '14 15:01 BeNdErR
Aceptado

Los escribí hace un tiempo para varios propósitos (devolveré los nombres de las columnas de dos letras para los números de columna> 26):

function columnToLetter(column)
{
  var temp, letter = '';
  while (column > 0)
  {
    temp = (column - 1) % 26;
    letter = String.fromCharCode(temp + 65) + letter;
    column = (column - temp - 1) / 26;
  }
  return letter;
}

function letterToColumn(letter)
{
  var column = 0, length = letter.length;
  for (var i = 0; i < length; i++)
  {
    column += (letter.charCodeAt(i) - 64) * Math.pow(26, length - i - 1);
  }
  return column;
}
AdamL avatar Jan 20 '2014 10:01 AdamL

esto funciona bien

=REGEXEXTRACT(ADDRESS(ROW(); COLUMN()); "[A-Z]+")

incluso para columnas más allá de Z.

Demostración de la función

Simplemente reemplácelo COLUMN()con su número de columna. El valor de ROW()no importa.

wronex avatar Mar 02 '2014 15:03 wronex

No es necesario reinventar la rueda aquí, utiliza en su lugar la gama GAS:

 var column_index = 1; // your column to resolve
 
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0];
 var range = sheet.getRange(1, column_index, 1, 1);

 Logger.log(range.getA1Notation().match(/([A-Z]+)/)[0]); // Logs "A"
Expandir fragmento

Tomi Heiskanen avatar Aug 22 '2017 12:08 Tomi Heiskanen
=SUBSTITUTE(ADDRESS(1,COLUMN(),4), "1", "")

Esto toma su celular, obtiene su dirección, por ejemplo, C1, y elimina el "1".

ingrese la descripción de la imagen aquí

Cómo funciona

  • COLUMN()da el número de la columna de la celda.
  • ADDRESS(1, ..., <format>)proporciona una dirección de una celda, en el formato especificado por <format>parámetro. 4significa la dirección que conoce, por ejemplo C1.
    • La fila no importa aquí, por eso usamos 1.
    • Ver ADDRESSdocumentos
  • Finalmente, SUBSTITUTE(..., "1", "")reemplaza 1en la dirección C1, por lo que te quedará la letra de la columna.
Ondra Žižka avatar Jun 11 '2015 10:06 Ondra Žižka

Esto funciona en rangosA-Z

fórmula=char(64+column())

jsString.fromCharCode(64+colno)

un código appscript de hoja de cálculo de Google, basado en @Gardener sería:

function columnName(index) {
    var cname = String.fromCharCode(65 + ((index - 1) % 26));
    if (index > 26)
        cname = String.fromCharCode(64 + (index - 1) / 26) + cname;
    return cname;
}
SauloAlessandre avatar Sep 22 '2016 16:09 SauloAlessandre