Trabalhando com planilhas do Excel em Python

O Excel é um programa de planilha popular e poderoso para Windows. O módulo openpyxl permite que programas Python leiam e modifiquem arquivos de planilha do Excel. Por exemplo, você pode ter uma tarefa chata em que precisa copiar alguns dados de uma tabela e colá-los em outra. Ou talvez você precise escolher algumas linhas entre milhares e modificá-las ligeiramente com base em uma determinada condição. Ou precisa examinar centenas de planilhas orçamentárias departamentais para encontrar déficits. Essas tarefas chatas podem ser feitas em Python.

Documento do Excel

Um arquivo de planilha do Excel é chamado de pasta de trabalho. Uma pasta de trabalho é salva em um arquivo com a extensão .xlsx. Cada pasta de trabalho pode conter várias planilhas (também chamadas de planilhas). A planilha que o usuário está visualizando no momento (ou a planilha visualizada pela última vez antes de fechar o Excel) é chamada de planilha ativa. Cada tabela tem colunas (endereços são letras que começam com A) e linhas (endereços são números que começam com 1). Rolagem em linhas e colunas específicas são chamadas de células. Cada célula contém um número ou valor de texto. A grade e os dados formados pelas células compõem a tabela.

Instale o módulo openpyxl

Python não vem com openpyxl, então você deve instalá-lo você mesmo. Abrir entrada de linha de comando

pip install openpyxl

para instalar.

Ler documentos do Excel

Usaremos uma planilha chamada example.xlsx, que pode ser encontrada e baixada em Automate the Boring Stuff with Python . Conforme mostrado na figura abaixo, existem 3 planilhas padrão denominadas Plan1, Sheet2 e Sheet3, que são fornecidas automaticamente pelo Excel para novas pastas de trabalho (diferentes sistemas operacionais e programas de planilhas podem fornecer planilhas padrão diferentes).

Abra o documento do Excel com o módulo openpyxl

Depois de importar o módulo openpyxl, você pode usar openpyxl.load_workbook()funções para abrir documentos do Excel.

openpyxl.load_workbook()A função aceita um nome de arquivo e retorna um valor do tipo de dados da pasta de trabalho. O objeto workbook representa todo o arquivo Excel (example.xlsx), semelhante ao objeto File que representa um arquivo de texto aberto.

obter planilha da pasta de trabalho

Uma lista de todos os nomes de planilhas na pasta de trabalho pode ser obtida por meio da propriedade sheetnames do objeto pasta de trabalho.

Cada planilha é representada por um objeto Worksheet, que pode ser obtido pela indexação na pasta de trabalho (usando a string do nome da planilha). A planilha ativa da pasta de trabalho pode ser obtida através da propriedade active do objeto Workbook. Depois de obter o objeto Worksheet, você pode obter seu nome através do atributo title.

obter célula da tabela

Após obter o objeto Worksheet, você pode acessar o objeto Cell pelo nome.

O objeto Cell possui uma propriedade value que contém o valor armazenado nesta célula. O objeto Cell também possui propriedades de linha, coluna e coordenada que fornecem informações sobre a localização da célula.

Conforme mostrado acima, acesse a propriedade value do objeto Cell da célula B1 para obter a string 'Maçãs'. O atributo de linha fornece o inteiro 1, o atributo de coluna fornece 2 e o atributo de coordenada fornece 'B1'.

Ao chamar um cell()método de tabela, você pode passar um número inteiro como os argumentos de palavra-chave de linha e coluna ou pode obter uma célula.

O tamanho da tabela pode ser determinado pelas propriedades max_column e max_row do objeto Worksheet.

sheet.max_column, sheet.max_row
# (3, 7)

Converter entre letras e números de colunas

Para converter de letras para números, chame a openpyxl.utils.column_index_from_stringfunção. Para converter de números para letras, chame a openpyxl.utils.get_column_letter()função.

Depois de importar essas duas funções do módulo openpyxl.utils, você pode chamá-las get_column_letter(), passando um inteiro como 27, para descobrir qual é a letra na coluna 27. A função column_index_stringfaz o contrário: você passa o nome da letra de uma coluna e ela retorna qual é o número dessa coluna.

Obter linhas e colunas de uma tabela

Você pode fatiar um objeto Worksheet para obter todos os objetos Cell em uma linha, coluna ou área retangular na planilha. Você pode então percorrer todas as células nesta fatia.

Esta tupla contém 3 tuplas: cada tupla representa 1 linha, de cima para baixo da área especificada. Cada uma dessas 3 tuplas internas contém uma linha de objetos Cell no intervalo especificado, da célula mais à esquerda até a mais à direita. Essa fatia da planilha contém todos os objetos Célula de A1 a C3, da célula superior esquerda até a célula inferior direita.

Você pode obter uma linha ou coluna na tabela da seguinte maneira

Gravar no documento do Excel

openpyxl também fornece alguns métodos para escrever dados. Isso significa que seu programa pode criar e editar arquivos de planilhas. Usando Python, criar uma planilha com milhares de linhas de dados é muito simples.

Criar e salvar documentos do Excel

Chame openpyxl.Workbook()a função para criar um novo objeto Workbook vazio.

Quando o objeto Workbook ou suas planilhas e células são modificados, o arquivo de planilha não é salvo, a menos que save()o método workbook seja chamado.

wb.save('demo.xlsx')

Criar e excluir planilhas

Usando os métodos create_sheet()e remove_sheet(), você pode adicionar ou excluir planilhas em uma pasta de trabalho.

create_sheet()O método retorna um novo objeto Worksheet, chamado SheetX, que por padrão é a última planilha da pasta de trabalho. Como alternativa, você pode usar os argumentos das palavras-chave index e title para especificar o índice ou o nome da nova planilha.

remove()O método aceita um objeto Worksheet como seu parâmetro, não uma string do nome da planilha.

escrever valor na célula

Escrever um valor em uma célula é como escrever um valor em uma chave em um dicionário.

Observando o arquivo demo.xlsx, você pode ver que os valores foram gravados no arquivo

Projeto: Ler dados da planilha

Suponha que você tenha uma planilha com dados do Censo dos EUA de 2010. Você tem a tarefa bastante chata de percorrer milhares de linhas em uma tabela, calculando a população total e o número de setores censitários em cada município (um setor censitário é uma área geográfica, definida para fins de um censo). Cada linha da tabela representa um setor censitário. A tabela é chamada censupopdata.xlsx e pode ser baixada em Automate the Boring Stuff with Python .

Há apenas uma tabela na planilha censuspopdata.xlsx chamada "Population by Census Tract". Cada linha contém dados de um setor censitário. As colunas são o número do setor censitário (A), a abreviatura do estado (B), o nome do município (C) e a população do setor censitário (D).

Neste projeto, precisamos escrever um script que leia os dados de uma planilha do censo e faça o seguinte:

  • Ler dados da planilha do Excel
  • Calcule o número de setores censitários em cada município
  • Calcule a população total de cada município
  • imprimir resultado

Isso significa que o código precisa fazer as seguintes tarefas:

  • Abra o documento do Excel com o módulo openpyxl e leia as células
  • Calcule todos os dados do setor censitário e da população, salve-os em uma estrutura de dados
  • Usando o módulo pprint, grave a estrutura de dados em um arquivo de texto com extensão .py

O código completo fica assim:

import openpyxl, pprint

# 用openpyxl模块打开Excel文档
wb = openpyxl.load_workbook('censuspopdata.xlsx')
sheet = wb['Population by Census Tract']
# 存储普查区数目和人口数据
countryData = {}

for row in range(2,sheet.max_row+1):
    state = sheet['B'+str(row)].value
    country = sheet['C'+str(row)].value
    pop = sheet['D'+str(row)].value

    countryData.setdefault(state, {})

    countryData[state].setdefault(country, {'tracts':0, 'pop':0})

    countryData[state][country]['tracts'] += 1
    countryData[state][country]['pop'] += int(pop)

# 将数据存储到文件中
resultFile = open('census2010.py', 'w')
resultFile.write('allData = ' + pprint.pformat(countryData))
resultFile.close()

Os dados salvos no arquivo census2010.py são assim:

referência 

Automatize as coisas chatas com Python

Se você encontrar dificuldades no início do aprendizado e quiser encontrar um ambiente de aprendizado e comunicação em python, você pode se juntar a nós, receber materiais de aprendizado e discutir juntos

 

Acho que você gosta

Origin blog.csdn.net/weixin_56659172/article/details/123966232
Recomendado
Clasificación