Openpyxl. Registro de datos
Bibliotecas
En esta entrada aprenderemos a utilizar openpyxl para automatizar el registro de datos en una hoja de cálculo. El resultado es un simple registro de datos, nada más. Aun no llegamos a la creación de una tabla de datos y por tanto queda muy lejos la creación de una base da datos, pero damos pasos importantes en esa dirección.
Para crear un registro de datos basado en un libro Excel mediante un script Python, primero importamos el módulo openpyxl mediante la instrucción...
from openpyxl import Workbook
Hecho esto ya estamos en disposición de crear nuestra primera hoja de cálculo mediante la función (sin parámetro) Workbook(), que asociaremos a una variable para facilitar el trabajo que sigue.
Hoja = Workbook()
De este modo ya hemos creado una documento Excel (que ya sabes es accesible también desde Calc), el cual contiene una hoja, por lo que ya podemos trabajar con él, pero te aconsejo que lo siguiente que hagas sea guardar tu trabajo mediante la función save() que, esta sí, tiene como parámetro la dirección donde guardar el documento y el propio identificador de éste (nombre y extensión), todo ello asociado a la variable con la que se identifica el documento
hoja.save("Hoja1.xlsx")- En este caso se entiende que el documento se guarda en el mismo directorio del script.
Aunque una única hoja puede ser suficiente para la mayoría de las tareas, habrá ocasiones en las que necesitemos disponer de más de una. Para ello necesitamos crear más hojas mediante código, lo que es posible y sencillo gracias a la función create_sheet() que recibe como parámetro el nombre de la hoja.
hoja1 = hc_uno.create_sheet("Hoja2")
De este modo podremos crear tantas hojas como deseemos, bien de forma sucesiva, bien posicionándola mediante un segundo parámetro tipo integer que indica la posición...
hoja0 = hc_uno.create_sheet("Hoja0",0)- Asociada a la variable hoja0 se crea una hoja de nombre Hoja0 en la posición 0, esto es, en primera posición del listado de hojas del libro.
También podremos cambiar el nombre visible de las hojas mediante el atributo title
hoja5 = hc_uno.create_sheet("Hoja5",-1)->hoja5.title ='Hoja3'- Asociada a la variable hoja5 creamos una hoja en penúltima posición a la que damos por nombre Hoja5, pero después modificamos ese nombre por Hoja3, aunque en el script deberemos seguir refiriéndonos a la hoja por su variable hoja5.
Esta diferencia es fundamental para posicionar datos en las celdas de las hojas, ya que debemos utilizar los nombres de las variables con las que éstas están referenciadas.
hoja5['B1'] = 'Estas en la Hoja 3'- Escribe en la celda B1 de la Hoja3 el string "'Estas en la Hoja 3'" aunque para ello usamos como referencia la variable hoja5
La anterior es la forma más sencilla y directa de escribir contenido en una celda, pero también podemos usar la función cell() asociada a la variable con la que identificamos la hoja. Esta función recibe tres parámetros: la fila, la columna y el dato (o variable) a escribir.
hoja5.cell(row=2, column=2, value='Segunda forma')
Y hablando de columnas (column) y de filas (row), también podemos grabar colecciones de datos en una tabla mediante un ciclo for, acercándonos así al objetivo de crear una tabla (base) de datos.
Para ello primero establecemos una hoja como hoja activa, esto es, la hoja sobre la que copiaremos los datos...
sheet = hc_uno.active
... y forzamos que ésta sea la nombrada como Sheet en el libro...
sheet = hc_uno['Sheet']
... después creamos nuestra colección de datos (en esta ocasión de forma directa)...
datos = [('id','Nombre', 'Edad'),
(0,'José',35),
(1,'Lucas',27),
(2,'Mario',31),
(3,'Antonio',28),
(4,'Sonia',24)
]
... y después desarrollamos un ciclo for sobre el parámetro row
for row in datos:
sheet.append(row)
Documento. Te dejo acceso al script que contiene el código trabajado en esta entrada. Con el tiempo ampliaremos el código para darle forma y utilidad; de momento es más puro ejercicio.