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.





obrigado por compartilhar!!!!