Persistencia de datos - Módulo Openpyxl

Excel de Microsoft es la aplicación de hoja de cálculo más popular. Ha estado en uso desde hace más de 25 años. Versiones posteriores del uso de ExcelOffice Open XML (OOXML) formato de archivo. Por lo tanto, ha sido posible acceder a archivos de hojas de cálculo a través de otros entornos de programación.

OOXMLes un formato de archivo estándar ECMA. Pythonopenpyxl El paquete proporciona funcionalidad para leer / escribir archivos de Excel con extensión .xlsx.

El paquete openpyxl usa una nomenclatura de clase similar a la terminología de Microsoft Excel. Un documento de Excel se denomina libro de trabajo y se guarda con la extensión .xlsx en el sistema de archivos. Un libro de trabajo puede tener varias hojas de trabajo. Una hoja de trabajo presenta una gran cuadrícula de celdas, cada una de ellas puede almacenar valor o fórmula. Las filas y columnas que forman la cuadrícula están numeradas. Las columnas se identifican por alfabetos, A, B, C,…., Z, AA, AB, etc. Las filas se numeran a partir de 1.

Una hoja de cálculo típica de Excel aparece de la siguiente manera:

La utilidad pip es lo suficientemente buena para instalar el paquete openpyxl.

pip install openpyxl

La clase Libro de trabajo representa un libro de trabajo vacío con una hoja de trabajo en blanco. Necesitamos activarlo para que se puedan agregar algunos datos a la hoja de trabajo.

from openpyxl import Workbook
wb=Workbook()
sheet1=wb.active
sheet1.title='StudentList'

Como sabemos, una celda en la hoja de trabajo se denomina formato ColumnNameRownumber. En consecuencia, la celda superior izquierda es A1. Asignamos una cadena a esta celda como -

sheet1['A1']= 'Student List'

Alternativamente, use la hoja de trabajo cell()método que utiliza el número de fila y columna para identificar una celda. Llame a la propiedad de valor al objeto de celda para asignar un valor.

cell1=sheet1.cell(row=1, column=1)
cell1.value='Student List'

Después de llenar la hoja de trabajo con datos, el libro se guarda llamando al método save () del objeto del libro.

wb.save('Student.xlsx')

Este archivo de libro de trabajo se crea en el directorio de trabajo actual.

La siguiente secuencia de comandos de Python escribe una lista de tuplas en un documento de libro de trabajo. Cada tupla almacena el número de rollo, la edad y las calificaciones del estudiante.

from openpyxl import Workbook
wb = Workbook()
sheet1 = wb.active
sheet1.title='Student List'
sheet1.cell(column=1, row=1).value='Student List'
studentlist=[('RollNo','Name', 'age', 'marks'),(1,'Juhi',20,100), 
   (2,'dilip',20, 110) , (3,'jeevan',24,145)]
for col in range(1,5):
   for row in range(1,5):
      sheet1.cell(column=col, row=1+row).value=studentlist[row-1][col-1]
wb.save('students.xlsx')

El libro de trabajo Students.xlsx se guarda en el directorio de trabajo actual. Si se abre con la aplicación Excel, aparece como se muestra a continuación:

El módulo openpyxl ofrece load_workbook() función que ayuda a leer los datos en el documento del libro de trabajo.

from openpyxl import load_workbook
wb=load_workbook('students.xlsx')

Ahora puede acceder al valor de cualquier celda especificada por número de fila y columna.

cell1=sheet1.cell(row=1, column=1)
print (cell1.value)
Student List

Ejemplo

El siguiente código completa una lista con datos de la hoja de trabajo.

from openpyxl import load_workbook
wb=load_workbook('students.xlsx')
sheet1 = wb['Student List']
studentlist=[]
for row in range(1,5):
   stud=[]
for col in range(1,5):
   val=sheet1.cell(column=col, row=1+row).value
stud.append(val)
studentlist.append(tuple(stud))
print (studentlist)

Salida

[('RollNo', 'Name', 'age', 'marks'), (1, 'Juhi', 20, 100), (2, 'dilip', 20, 110), (3, 'jeevan', 24, 145)]

Una característica muy importante de la aplicación Excel es la fórmula. Para asignar una fórmula a una celda, asígnela a una cadena que contenga la sintaxis de la fórmula de Excel. Asigne la función PROMEDIO a la celda c6 que tiene edad.

sheet1['C6']= 'AVERAGE(C3:C5)'

El módulo Openpyxl tiene Translate_formula()función para copiar la fórmula en un rango. El siguiente programa define la función PROMEDIO en C6 y la copia en C7 que calcula el promedio de calificaciones.

from openpyxl import load_workbook
wb=load_workbook('students.xlsx')

sheet1 = wb['Student List']
from openpyxl.formula.translate import Translator#copy formula
sheet1['B6']='Average'
sheet1['C6']='=AVERAGE(C3:C5)'
sheet1['D6'] = Translator('=AVERAGE(C3:C5)', origin="C6").translate_formula("D6")
wb.save('students.xlsx')

La hoja de trabajo modificada ahora aparece de la siguiente manera: