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!!!!