Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Gnrtuga

Trabalhar com Excel

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.