Jump to content
Gnrtuga

Trabalhar com Excel

Recommended Posts

Gnrtuga

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.. :)

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.