Skip to content

Extrair Múltiplas Tabelas de uma Planilha do Excel Usando Python

    Python+Excel

    Se você já teve problemas ao trabalhar com planilhas complexas no Excel usando o pandas (pd.read_excel), este artigo irá ensinar como extrair tabelas separadamente usando Python e a biblioteca openpyxl.

    O Limite do pd.read_excel

    Vamos começar entendendo o problema. Se temos uma planilha do Excel com várias tabelas e usamos pd.read_excel, obtemos um grande conjunto de dados com todas as tabelas. Mas como podemos extrair cada tabela separadamente?

    A Ideia – Extrair Tabelas Individualmente

    Cada tabela em uma planilha tem algumas características comuns:

    1. Uma célula no canto superior esquerdo.
    2. Um número fixo de colunas.
    3. Um número fixo de linhas.

    Podemos escrever código para extrair cada uma dessas tabelas, fornecendo as informações necessárias para cada uma delas.

    Usando openpyxl para Ler um Arquivo do Excel

    Primeiro, certifique-se de instalar a biblioteca openpyxl em seu ambiente Python. Você pode fazer isso executando o seguinte comando em seu terminal ou prompt de comando:

    pip install openpyxl

    Em seguida, vamos usar o openpyxl para abrir o arquivo Excel:

    from openpyxl import load_workbook
    
    # Carregue o caminho para o arquivo Excel
    workbook = load_workbook('Book1.xlsx')
    
    # Selecione a planilha do Excel que você deseja ler
    sheet1 = workbook['Sheet1']

    Agora que carregamos a planilha do Excel, podemos começar a extrair as tabelas individualmente.

    Código para Extrair Tabelas Individuais

    Aqui está o código para extrair tabelas individuais:

    from string import ascii_uppercase
    from itertools import pairwise
    from openpyxl import load_workbook
    import pandas as pd
    
    def get_next_code(code):
        '''
        Retorna a próxima letra da coluna com base na letra atual
        Entrada: 'AA', Saída: 'AB'
        Entrada: 'AB', Saída: 'AC'
        '''
        letter_map = {a: b for a, b in pairwise(ascii_uppercase)}
        code = list(code)
        i = -1
        while True:
            if code[i] == 'Z':
                code[i] = 'A'
                i -= 1
                if abs(i) > len(code):
                    return 'A' + ''.join(code)
            else:
                code[i] = letter_map[code[i]]
                return ''.join(code)
    
    def snap_table(sheet, topleft, num_columns, num_rows):
        '''
        Entrada:
            sheet: a planilha do Excel que queremos extrair
            topleft: coordenadas do canto superior esquerdo, por exemplo, 'B2'
            num_columns: número de colunas na tabela
            num_rows: número de linhas na tabela
        Saída:
            dataframe pandas representando a tabela
        '''
        try:
            import re
            col = re.findall('[a-zA-Z]+', topleft)[0]
            num = int(re.findall('[0-9]+', topleft)[0])
    
            columns = [col]
            for i in range(num_columns - 1):
                columns.append(get_next_code(columns[-1]))
            numbers = [n for n in range(num, num + num_rows)]
    
            data = []
            for n in numbers:
                row = []
                for c in columns:
                    code = c + str(n)
                    row.append(sheet[code].value)
                data.append(row)
            return pd.DataFrame(data[1:], columns=data[0])
        except Exception as e:
            return pd.DataFrame()

    O código acima define uma função chamada snap_table, que recebe os seguintes parâmetros:

    • sheet: a planilha do Excel da qual queremos extrair a tabela.
    • topleft: as coordenadas do canto superior esquerdo da tabela, por exemplo, ‘B2’.
    • num_columns: o número de colunas na tabela.
    • num_rows: o número de linhas na tabela.

    A função snap_table extrai a tabela com base nessas informações e a retorna como um dataframe do pandas.

    Como Usar o Código

    Agora que temos nossa função snap_table, podemos usá-la para extrair tabelas individuais de nossa planilha. Por exemplo:

    # Carregue o caminho para o arquivo Excel e selecione a planilha
    workbook = load_workbook('Book1.xlsx')
    sheet1 = workbook['Sheet1']
    
    # Extrair e imprimir uma tabela
    print(snap_table(sheet1, 'B2', 2, 4))

    Você pode chamar a função snap_table com as coordenadas do canto superior esquerdo e as dimensões da tabela que deseja extrair.

    Conclusão

    Espero que este artigo tenha sido útil para você, permitindo extrair tabelas individuais de uma planilha complexa do Excel. Agora você pode lidar com planilhas contendo várias tabelas de forma mais eficiente usando Python e a biblioteca openpyxl.

    Mais Referências

    Link para a biblioteca Openpyxl: https://openpyxl.readthedocs.io/en/stable/

    Leave a Reply

    Your email address will not be published. Required fields are marked *