Persistência de dados - Módulo Openpyxl

O Excel da Microsoft é o aplicativo de planilha mais popular. Ele está em uso há mais de 25 anos. Versões posteriores do uso do ExcelOffice Open XML (OOXML) formato de arquivo. Com isso, foi possível acessar arquivos de planilhas por meio de outros ambientes de programação.

OOXMLé um formato de arquivo padrão ECMA. Python'sopenpyxl O pacote fornece funcionalidade para ler / gravar arquivos do Excel com extensão .xlsx.

O pacote openpyxl usa nomenclatura de classe semelhante à terminologia do Microsoft Excel. Um documento Excel é chamado de pasta de trabalho e é salvo com a extensão .xlsx no sistema de arquivos. Uma pasta de trabalho pode ter várias planilhas. Uma planilha apresenta uma grande grade de células, cada uma delas pode armazenar valor ou fórmula. As linhas e colunas que formam a grade são numeradas. As colunas são identificadas por alfabetos, A, B, C,…., Z, AA, AB e assim por diante. As linhas são numeradas a partir de 1.

Uma planilha do Excel típica aparece da seguinte maneira -

O utilitário pip é bom o suficiente para instalar o pacote openpyxl.

pip install openpyxl

A classe Workbook representa uma pasta de trabalho vazia com uma planilha em branco. Precisamos ativá-lo para que alguns dados possam ser adicionados à planilha.

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

Como sabemos, uma célula na planilha é nomeada como formato ColumnNameRownumber. Consequentemente, a célula superior esquerda é A1. Atribuímos uma string a esta célula como -

sheet1['A1']= 'Student List'

Alternativamente, use a planilha cell()método que usa número de linha e coluna para identificar uma célula. Chame a propriedade value para o objeto de célula para atribuir um valor.

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

Depois de preencher a planilha com dados, a pasta de trabalho é salva chamando o método save () do objeto de pasta de trabalho.

wb.save('Student.xlsx')

Este arquivo de pasta de trabalho é criado no diretório de trabalho atual.

O script Python a seguir escreve uma lista de tuplas em um documento de pasta de trabalho. Cada tupla armazena o número do rolo, idade e marcas do aluno.

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')

A pasta de trabalho students.xlsx é salva no diretório de trabalho atual. Se aberto usando o aplicativo Excel, aparece como abaixo -

O módulo openpyxl oferece load_workbook() função que ajuda na leitura de dados no documento da pasta de trabalho.

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

Agora você pode acessar o valor de qualquer célula especificada por linha e número de coluna.

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

Exemplo

O código a seguir preenche uma lista com os dados da planilha.

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)

Resultado

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

Um recurso muito importante do aplicativo Excel é a fórmula. Para atribuir uma fórmula a uma célula, atribua-a a uma string contendo a sintaxe da fórmula do Excel. Atribua a função AVERAGE à célula c6 com idade.

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

Módulo Openpyxl tem Translate_formula()função para copiar a fórmula em um intervalo. O programa a seguir define a função AVERAGE em C6 e a copia para C7 que calcula a média das notas.

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')

A planilha alterada agora aparece da seguinte forma -