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_string
funçã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_string
faz 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