Gnrtuga 21 Posted March 12, 2019 Report Share Posted March 12, 2019 Olá pessoal, ando aqui a brincar com o openpyxl e há aqui qualquer coisa que me está a falhar. Portanto é assim, tenho um ficheiro excel onde tenho informação sobre vários alvos, e o objetivo é filtrar os conteúdos que interessam por alvo e criar um separador para cada alvo com essa informação filtrada. No código o que não está a funcionar é a parte de gravar no separador certo, uma vez que só grava a informação toda filtrada no último separador e deixa os outros em branco. O código que tenho é este: import openpyxl as excel def trata_excel(nomeficheiro): # Declaração de variáveis livro = excel.load_workbook(nomeficheiro) folha = livro['Folha1'] cabeçalhos = {} # vai receber os cabeçalhos e o número da respetiva coluna alvos = [] # aqui vou percorrer a primeira célula de todas as colunas e retirar os cabeçalhos for coluna in range(1,folha.max_column +1): celula = folha.cell(row=1, column=coluna) # Adicionando-os a um dicionário cabeçalhos.update({celula.value:coluna}) # aqui vou ver se Alvo existe if "Alvo" in cabeçalhos: coluna_alvo = cabeçalhos["Alvo"] # Retira o número da coluna associado a Alvo for linha in range(2,folha.max_row +1): # vou percorrer todas as linhas para celula_alvo = folha.cell(linha,coluna_alvo) # ver quantos alvos existem # aqui vou ver se o número de alvo não está na lista de alvos if celula_alvo.value not in alvos: alvos.append(celula_alvo.value) # e vou adicionar caso não esteja else: return "Não encontrei a coluna referente a 'Alvo" # Encontrou o cabeçalho alvo e vou fazer um loop pelos alvos #localização dos produtos coluna_produto = cabeçalhos["Tipo de Produto"] for alvo in alvos: # Vou criar um separador por alvo nova_folha = livro.create_sheet(str(alvo)) # por cada alvo percorro todas as linhas nova_linha = 1 # variável para inserir as linhas todas de seguida for linha in range(2,folha.max_row+1): produto = folha.cell(linha, coluna_produto) # e vejo se é esse alvo if alvo == celula_alvo.value and produto.value =="Voz" or alvo == celula_alvo.value and produto.value == "SMS" or alvo == celula_alvo.value and produto.value=="MMS": nova_linha += 1 for coluna in range(1, folha.max_column + 1): valor = folha.cell(row=linha, column=coluna).value livro[str(alvo)].cell(row=nova_linha,column=coluna, value= valor) livro.save("novo.xlsx") #print(cabeçalhos) print(alvos) # só para ver se encontrou os alvos e para ver que já acabou Penso que o problema é ter a parte para gravar o ficheiro na parte errada do código Obrigado Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!) Nunca mais é verão outra vez.. Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now