Convertir el índice de la columna en la letra de la columna correspondiente
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:
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 0
o 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
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;
}
esto funciona bien
=REGEXEXTRACT(ADDRESS(ROW(); COLUMN()); "[A-Z]+")
incluso para columnas más allá de Z.
Simplemente reemplácelo COLUMN()
con su número de columna. El valor de ROW()
no importa.
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"
=SUBSTITUTE(ADDRESS(1,COLUMN(),4), "1", "")
Esto toma su celular, obtiene su dirección, por ejemplo, C1, y elimina el "1".
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.4
significa la dirección que conoce, por ejemploC1
.- La fila no importa aquí, por eso usamos
1
. - Ver
ADDRESS
documentos
- La fila no importa aquí, por eso usamos
- Finalmente,
SUBSTITUTE(..., "1", "")
reemplaza1
en la direcciónC1
, por lo que te quedará la letra de la columna.
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;
}