Python para ler e escrever em planilha

Existem algumas formas de integrar o python com o Microsoft Excel. O próprio pandas possui funções que facilitam a leitura e escrita em planilhas, em conjunto com a biblioteca openpyxl – para instalá-la, você pode usar “sudo pip3 install openpyxl”. Caso precise gravar um arquivo com um trecho de uma data frame, a função a seguir já pode resolver:

def excel_file(self, df_final, filename, sheet_name):
	df = df_final[['data','valor']].iloc[1:6,]
	df.to_excel(filename, sheet_name=sheet_name, index=False)

O exemplo a seguir abre um arquivo Excel para atualização, sem apagar os dados anteriormente gravados nas planilhas:

# -*- coding: utf-8 -*-
# Script para gravar em planilha Excel concatenando conteúdo

import pandas as pd
import numpy as np

# Criar data frame de dados aleatórios
df = pd.DataFrame(np.random.randint(0,100,size=(20, 4)), columns=list('ABCD'))

# Criar objeto para leitura e selecionar planilha
excel_reader = pd.ExcelFile('exemplo.xlsx')
to_update = {"Plan1": df}
# Criar objeto para escrita
excel_writer = pd.ExcelWriter('exemplo.xlsx')

# Loop para o caso de querer trabalhar com mais de uma planilha
for sheet in excel_reader.sheet_names:
	sheet_df = excel_reader.parse(sheet)
	append_df = to_update.get(sheet)
	# Concatenar com o que já existia
	if append_df is not None:
		sheet_df = pd.concat([sheet_df, df]).drop_duplicates()
	# Gravar no arquivo
	sheet_df.to_excel(excel_writer, sheet, index=False)
# Salvar e fechar arquivo
excel_writer.save()

O arquivo Excel deve permanecer fechado ao realizar a execução. Se rodar o script novamente, será gerada uma nova tabela que aparecerá na sequência.

Usando o arquivo atualizado nesse exemplo, ele pode ser usado também para leitura e escrita nesse outro script, que usa o módulo “win32com.client” – instalado através do comando “pip install pypiwin32”. Nele, o arquivo será aberto e selecionada uma parte da tabela com tamanho 3×3, que será impressa na tela.

# -*- coding: utf-8 -*-
# Script para gravar em planilha Excel

import os
import numpy as np
import pandas as pd
import win32com.client as win32
from xlsxwriter.utility import xl_range, xl_cell_to_rowcol

# Função para abrir arquivo Excel
excel = win32.gencache.EnsureDispatch('Excel.Application')
def openWorkbook(xlfile):
	global excel
	global win32
	try:        
	    xlwb = win32.GetObject(xlfile)            
	except Exception as e:
	    try:
	        xlwb = excel.Workbooks.Open(xlfile)
	    except Exception as e:
	        print(e)
	        xlwb = None                    
	return(xlwb)

# Função para ler planilha e gravar em data frame
def dataFramexl(sheet, rng):
	array = np.array(sheet.Range(rng).Value)
	return pd.DataFrame( array[1:], columns=array[0] )

# Função para imprimir tabela
def printxl(sheet,start, array ):
	array = np.array(array)
	start = xl_cell_to_rowcol(start)
	sheet.Range( xl_range(
		start[0],
		start[1],
		len(array)+start[0]-1,
		len(array[0])+start[1]-1
		)
	).Value = array

# Função para imprimir linha
def printxl_line(sheet,start, array):
	array = np.array(array)
	start = xl_cell_to_rowcol(start)
	sheet.Range( xl_range(
		start[0],
		start[1],
		start[0],
		len(array)+start[1]-1
		)
	).Value = array

# Função para gravar planilha
def printdf(sheet,start, df):
	data = np.array(df)
	data = np.insert(data,0,list( df.columns ),axis=0)
	printxl(sheet,start, data)

# Função para abrir planilha
def openSheet(wb,sheet):
	try:
		return  wb.Worksheets(sheet)
	except Exception as e:
	 	ws = wb.Worksheets.Add()
	 	ws.Name = sheet
	 	return ws

# Abrir arquivo e planilha
wb = openWorkbook(os.getcwd()+'\exemplo.xlsx')
planilha =  wb.Worksheets("Plan1")
# Selecionar dados entre linhas 1 e 4 e colunas A e C e imprimir na tela
dados_lidos = dataFramexl(planilha, "A1:C4")
print(dados_lidos)

# Escrever texto na planilha começando na célula F1
lista = ['coluna1','coluna2']
printxl_line(planilha,'F1',lista)
# Escrever tabela em uma planilha - se não existir, é criada uma nova planilha
planilha_nova = openSheet(wb,'Plan2')
printdf(planilha_nova,'A1',dados_lidos)

Foram feitas funções para tornar o trabalho de abrir, selecionar e gravar no arquivo Excel um pouco mais gerais e diretas. O arquivo editado deve permanecer aberto durante a execução do python. O que existir nas células que estiverem recebendo texto será sobrescrito. Se fechar o arquivo e não salvar, tudo voltará ao estado original (anterior à execução o python).

Dentre outras opções para trabalhar em planilhas Excel ou OpenOffice Calc estão o openpyxl e o xlwt.

One comment

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.