Obtener con Python el número que corresponde a la columna de una hoja de cálculo

Cuando trabajamos con hojas de cálculo a veces es necesario conocer qué número de columna se corresponde con la letra de la misma, es decir, qué posición de columna (primera, segunda, etc.) se corresponde con cada columna en letra (A, B, etc.). Tanto en Excel como en LibreOffice tenemos la función COLUMNA(«..») que nos devuelve dicho dato, pero en ocasiones necesitamos conocerlo para acceder por programa a un dato determinado dentro de una hoja de cálculo de grandes dimensiones, que hace difícil calcular mentalmente dicha información.

Para convertir la letra a su número correspondiente podemos hacerlo de la misma manera que mentalmente damos un valor numérico a una cifra de varios dígitos. Me explico: cuando vemos un número, por ejemplo 325, el valor que le damos mentalmente es 3 * 102 + 2 * 101 + 5 * 100 porque diez es la base numérica de nuestro sistema decimal.

Con las letras de la hoja de cálculo podemos hacer lo mismo, teniendo en cuenta que la base de nuestro sistema «numérico» son las letras de la A a la Z, un conjunto de 26 dígitos, es decir, es como si trabajáramos en base 26. De esta forma, el valor «numérico» de una «cifra» como «XDR» sería 24 * 263 + 4 * 261 + 18 * 260 porque X es la letra vigesimocuarta, D es la cuarta letra y R la decimoctava de un total de 26 letras.

Podemos tener ese cálculo guardado en una función con el lenguaje de programación que usemos habitualmente, por ejemplo en Python sería:

def num_from_col(col):
letras = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
rpta = n = 0
columna_aux = col[::-1].upper()
for letra in columna_aux:
valor_letra = letras.index(letra) + 1
rpta += valor_letra * len(letras) ** n
n += 1
return rpta

Para hacer el cálculo hemos dado la vuelta a la expresión a evaluar para que su posición en la cadena se corresponda con el índice al que hay que elevar la base. También hemos pasado a mayúsculas el parámetro recibido para que se corresponda con la lista de letras que usamos de base. Sin embargo, a esta función le falta cosas como el control de excepciones, la validación del dato de entrada, etc. pero la dejo así como ejemplo básico para poder adaptarlo cuando se necesite.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *