Uso básico de openpyxl

Uso de openpyxl

1 Estrutura básica do Excel

Pasta de trabalho: um documento de planilha do Excel é chamado de pasta de trabalho, uma pasta de trabalho é salva no .xlsxarquivo de extensão .

Insira a descrição da imagem aqui

Folha: uma pasta de trabalho pode conter várias folhas (também chamadas de planilhas). A tabela exibida atualmente pelo usuário (ou a última tabela exibida antes de fechar o Excel) é chamada de tabela ativa

Insira a descrição da imagem aqui

Linha: a linha na tabela, o endereço é um número começando em 1

Coluna: a coluna da tabela, o endereço é a letra que começa em A

Célula: uma célula, uma célula composta de uma linha e coluna específicas, é chamada de célula. Cada célula contém um número ou valor de texto. A grade e os dados formados pelas células constituem a tabela.

Insira a descrição da imagem aqui

2 Instale o módulo openpyxl

Python não vem com openpyxl, então ele precisa ser instalado separadamente antes de poder ser usado normalmente.

Abra a linha de comando e digite no Windows:

pip install openpyxl

Abra o terminal no Mac e digite:

pip3 install openpyxl

Se você deseja testar se a instalação está correta, você pode inserir o seguinte código em um ambiente interativo:

import openpyxl

Se o módulo estiver instalado corretamente, nenhuma mensagem de erro será retornada após a execução

Link do documento oficial Openpyxl:

https://openpyxl.readthedocs.io/en/stable/index.html

3 Leia uma tabela Excel existente

Insira a descrição da imagem aqui

Exemplo simples

from openpyxl import load_workbook
# fileName 这里是指文件路径
fileName = "工作簿.xlsx"
# 以只读模式打开工作簿
wb = load_workbook(filename = fileName,read_only = True)
# sheetName 就是 sheet页的名称
sheetName = "Sheet1"
# 通过 工作表名 获取 工作表
ws = wb[sheetName]
# 按行读取 工作表的内容
for row in ws.rows:
    for cell in row:
        # 输出 单元格中的数据
        print(cell.value)

3.1 Obter objetos de pasta de trabalho

Após importar o módulo openpyxl, você pode usar o método load_workbook () para ler o arquivo Excel. O método openpyxl.load_workbook () retorna um objeto de pasta de trabalho (também um valor do tipo de dados da pasta de trabalho). Para a conveniência do uso subsequente, geralmente nomeamos esse objeto como wb.

Observação: o método load_workbook () só pode ler um arquivo de tabela do Excel existente e não pode criar uma nova tabela do Excel.

import openpyxl

wb = openpyxl.load_workbook(filename, read_only=False, keep_vba=False, data_only=False, keep_links=True)

O método openpyxl.load_workbook () pode receber vários parâmetros para configurações de leitura

filename: tipo de string, o caminho do arquivo para ler o arquivo Excel, você pode usar um caminho relativo ou um caminho absoluto.

read_only: tipo booleano, selecione o modo somente leitura ou o modo leitura-gravação, selecione o modo somente leitura para melhorar a velocidade da consulta, o padrão é False.

keep_vba: tipo booleano, mantém o conteúdo vba (isso não significa que você pode usá-lo), o padrão é False.

data_only: tipo booleano. Se definido como True, a célula que contém a fórmula exibirá o resultado do cálculo mais recente ou Nenhum. Se definido como False, a célula exibirá a fórmula. O padrão é False. Nota: Abra com data_only = False e, finalmente, salve com a função save (), o arquivo xlsx original só tem a fórmula data_only = False. Se você deseja recuperar a fórmula e o resultado, você precisa abrir o arquivo com o Excel e salvá-lo.

keep_links: tipo booleano, se deseja manter links para pastas de trabalho externas. O padrão é verdadeiro.

3.2 Obter objeto de planilha

3.2.1 Obtenha todas as planilhas na pasta de trabalho

Chame o método get_sheet_names () ou o atributo sheetnames para obter todos os nomes de planilhas na pasta de trabalho e retorná-los como uma lista.

from openpyxl import load_workbook
# fileName 这里是指文件路径
fileName = "工作簿.xlsx"
# 以只读模式打开工作簿
wb = load_workbook(filename = fileName,read_only = True)
# 获取工作簿中所有的工作表,返回一个列表对象
wb.get_sheet_names()
wb.sheetnames

3.2.2 Selecione a planilha a ser operada

Cada planilha é representada por um objeto Worksheet, que pode ser obtido por meio de uma chave ou método semelhante a um dicionário. Por fim, você também pode obter a tabela ativa por meio de wb.active (a última tabela exibida antes de fechar o Excel)

# 通过工作表名称去的工作表
sheet = wb.get_sheet_by_name('工作表名称')
sheet = wb['工作表名称']

# 获取工作簿中的活动表
sheet = wb.active
# 获取活动表的表名称
sheet.title

3.2.3 Obtenha alguns atributos na tabela

# 获取表格的大小(表格存在数据的大小)
sheet.dimensions
# 单独获取最大行或列
sheet.max_row or sheet.max_column
# 设置表格为隐藏状态
sheet.sheet_state = 'hidden'
# 设置表格为显示状态
sheet.sheet_state = 'visible'

3.3 Obtenha o objeto da célula

3.3.1 Obter o objeto de célula

Com o objeto de tabela, você pode obter o objeto de célula de acordo com as coordenadas ou o número de linhas e colunas

# 通过固定的行列坐标获取单元格对象
cell = sheet['A1']
# 通过数字的行列获取单元格对象
cell = sheet.cell(row=1,column=1)
# 为单元格赋值
cell.value = 'A1'

3.3.3 Obter alguns atributos de uma célula

# 获取单元格的行
cell.row
# 获取单元格的列
cell.column
# 获取单元格的坐标
cell.coordinate

3.3.4 Pegue uma linha ou coluna de células e retorne um objeto de tupla

Você pode fatiar o objeto de tabela para obter todos os objetos de célula em uma linha, coluna ou área retangular na planilha. Depois, você pode obter todas as células da fatia fazendo um loop.

# 取一列单元格
cells = sheet['A']
# 取一行单元格
cells = sheet[1]
# 取表格当中的所有列,一列为一组
cells = sheet.columns
# 取表格当中的所有行,一行为一组
cells = sheet.rows
# 已知单元格矩形范围坐标时
cells = sheet['A1:C5']
# 已知单元格起始与终结的行列数时
cells = sheet.iter_cols(min_row=1, max_row=5, min_col=1, max_col=3)
cells = sheet.iter_rows(min_row=1, max_row=5, min_col=1, max_col=3)

4 Crie uma nova tabela Excel

4.1 Criar uma nova tabela

Para criar uma nova tabela do Excel, você precisa usar o método openpyxl.Workbook (). Na verdade, o método Workbook chama o arquivo de modelo do Excel que vem com openpyxl.

Ao modificar o conteúdo na tabela do Excel, o arquivo de planilha não será salvo automaticamente até que usemos o método save () da pasta de trabalho.

import openpyxl
# 打开一个工作簿,由于是创建一个新的,所以不需要添加路径参数
wb = openpyxl.Workbook(encodin='utf-8')
# 获取活动表
ws = wb.active
# 修改活动表明湖曾
ws.title = 'test1'
# 修改 A1 单元格数据
ws['A1'] = 'A1'
# 查看当前所有表格名称
wb.get_sheet_names()
# 保存Excel文件
wb.save('test1.xlsx')

4.2 Algumas operações em objetos de mesa

4.2.1 Criar tabela

O método create_sheet () retorna um novo objeto de planilha denominado SheetX, cujo padrão é a última planilha da pasta de trabalho. Ou você pode usar os parâmetros de índice e título para especificar o índice e o nome da nova planilha

# 使用工作簿对象创建一个新的表格,表格名称为test2
wb.create_sheet(index=None,title='test2')

índice: Tipo inteiro, defina o índice da nova planilha, o padrão é Nenhum e coloque no final, se definido como 0, a tabela é colocada no topo.

título: tipo de string, defina o nome da nova planilha, se o novo nome da planilha já existir, o novo nome da planilha automaticamente se tornará title1.

4.2.2 Excluir tabela

O método remove () recebe um objeto de tabela em vez de uma string do nome da tabela.

wb = openpyxl.load_workbook('test.xlsx')
# 使用工作簿对象删除表格
wb.remove(wb['test2'])
wb.save('test.xlsx')

4.2.3 Copiar tabela

O método copy_worksheet () recebe um objeto de tabela e o copia e cola

wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active
# 复制选中表格
wb.copy_worksheet(sheet)
wb.save('test.xlsx')

4.2.4 Inserir e excluir linhas e colunas na tabela

Insira linhas e colunas

wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active

# 插入行
# 在idx行上方插入数量为amount的行
sheet.insert_rows(idx=2, amout=2)

# 插入列
# 在idx列左侧插入数量为amount的行
sheet.insert_cols(idx=2, amout=2)

wb.save('test.xlsx')

Excluir linhas e colunas

wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active

# 删除行
# 从idx行开始向下删除amount数量的行,包括idx这一行
sheet.delete_rows(idx=2, amout=2)

# 删除列
# 从idx列开始向右删除amount数量的列,包括idx这一列
sheet.delete_cols(idx=2, amout=2)

wb.save('test.xlsx')

4.2.5 Adicionar dados à tabela

Adicionar novos dados significa adicionar dados a uma tabela existente. Você só pode usar o método load_workbook () para ler a planilha do Excel.

O método append () aceita um parâmetro variável, incluindo, mas não se limitando a uma lista, intervalo ou gerador ou dicionário

Se você passar em uma lista: adicionar todos os valores em ordem a partir da primeira coluna, o elemento da lista corresponde a cada linha

Se um dicionário for passado: o valor é atribuído à coluna indicada pela tecla (número ou letra)

Nota: append só pode adicionar uma linha de dados por vez. Se você quiser adicionar várias linhas, você precisa combiná-lo com loops ou outros métodos.

wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active
# 在当前工作表数据的底部追加一组值
sheet.append(iterable)
# 追加数据
sheet.append([1,2,3])
sheet.append({
    
    'A':'这是A1'})

4.3 Algumas operações nas células

4.3.1 Modificar os dados da célula e definir a fórmula

wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active
cell = sheet['A1']
# 修改单元格数据
cell.value = 'A1'
# 在单元格中添加公式
cell.value = '=SUM(A2:C4)'
wb.save('test.xlsx')

# 查看openpyxl支持的公式
from openpyxl.utils import FORMULAE
FORMULAE

4.3.2 Mover células

Use o método move_range () para mover as células

sheet.move_range(cell_range, rows=0, cols=0, translate=False)

wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active

# 将A1:C2范围的单元格,向下移动一行,向右移动2列
sheet.move_range('A1:C2', rows=1, cols=2)

4.3.3 Congelar painel

Para planilhas do Excel com muitos dados para serem exibidos em uma tela, congelar as linhas ou colunas necessárias é muito útil.

Usando a propriedade freeze_panes, você pode definir uma string de coordenadas de célula para congelar as linhas e colunas acima e à esquerda das coordenadas da célula, mas as linhas e colunas onde a própria célula está localizada não serão congeladas.

# 冻结行1
sheet.freeze_panes = 'A2'
# 冻结列A
sheet.freeze_panes = 'B1'
# 冻结列A和列B,行1
sheet.freeze_panes = 'C2'
# 不会冻结窗格
sheet.freeze_panes = 'A1'

5 Modificação de estilo de célula

Definir o estilo da fonte de certas linhas ou colunas de células pode ajudá-lo a enfatizar as principais áreas da planilha.

Aqui você precisa usar o método Font () em openpyxl.styles

Nota: Depois que uma instância dos seguintes estilos (fonte, preenchimento, borda, posição, etc.) é criada, as propriedades da instância não podem ser alteradas e a instância só pode ser recriada.

5.1 Obtenha o estilo da fonte da célula

import openpyxl
wb = openpyxl.load_workbook('test.xlsx')
sheet = wb.active
cell = sheet['A1']
# 获取单元格字体所有属性
cell.font
# 获取字体对象
font = cell.font
# 获取字体名称
font.name
# 获取字体大小
font.size
# 字体是否加粗
font.bold
# 字体是否为斜体
font.italic

5.2 Definir o estilo da fonte da célula

O método Font () pode definir o estilo da fonte da célula, a seguir estão algumas configurações de parâmetro comumente usadas

# 导入需要的方法
from openpyxl.styles import Font
from openpyxl import load_workbook
# 加载一个Excel电子表格
wb = load_workbook('test.xlsx')
sheet = wb.active
cell = sheet['A1']
cell.value = 'CSDN'

# 设置一个字体风格,宋体,字号20,加粗,斜体,颜色为红色
font = Font(name='宋体',size=20, bold=True,italic=True,color='FF0000')
# 设置选中单元格的字体风格
cell.font = font
wb.save('test.xlsx')

nome: tipo de string, insira o nome da fonte a ser definida.

size: tipo inteiro positivo, defina o tamanho da fonte.

negrito: tipo booleano, verdadeiro significa negrito.

itálico: tipo booleano, verdadeiro significa itálico.

cor: tipo de string, insira o número hexadecimal da cor (HEX), como'FFFFFF 'para branco.

5.3 Definir classificação de formato de célula

Você pode definir a classificação do formato da célula, definindo o estilo da célula

# 设置单元格分类为百分比
cell.style = '百分比'
cell.style = '常规'

# 常规单元格
cell.number_format = 'General'
# 百分比单元格
cell.number_format = '0.00%'
# 科学计数法
cell.number_format = '0.00E+00'

O formato de célula do Excel compatível com openpyxl

https://openpyxl.readthedocs.io/en/stable/_modules/openpyxl/styles/numbers.html?highlight=openpyxl.styles.numbers

5.4 Configuração de formato de alinhamento de células

# 导入所需模块
from openpyxl.styles import Alignment
# 设置单元格对齐样式
alignment = Alignment(horizontal='center', vertical='center', wrap_text=True)

# 应用样式
cell.alignment = alignment

Vários parâmetros podem ser passados ​​no Alinhamento:

horizontal: tipo de string, alinhamento horizontal, correspondendo ao formato de alinhamento auxiliar do Excel

"general", "left", "center", "right", "fill", "justify", "centerContinuous",
    "distributed"

vertical: tipo de string, alinhamento vertical, correspondendo ao formato de alinhamento auxiliar do Excel

 "top", "center", "bottom", "justify", "distributed",

wrap_text: tipo booleano, defina se deseja quebrar automaticamente

textRotation: tipo inteiro, define o ângulo de rotação do texto, o valor máximo é 180

Link do documento oficial:

https://openpyxl.readthedocs.io/en/latest/_modules/openpyxl/styles/alignment.html

5.5 Definir o estilo de preenchimento de cor

5.5.1 Preenchimento de cor pura

# 导入所需模块
from openpyxl.styles import PatternFill
# 设置颜色填充样式
pattern_fill = PatternFill(fill_type='solid',fgColor='00B0F0')

# 应用样式
cell.fill = pattern_fill

fill_type: tipo de string, definir o estilo de preenchimento, o comumente usado é sólido

fgColor: tipo de string, número hexadecimal da cor de entrada HEX

Nota: É declarado no documento oficial que se fill_type não for especificado, os parâmetros subsequentes são inválidos

5.5.2 Preenchimento de cor gradiente

# 导入所需模块
from openpyxl.styles import GradientFill
# 设置颜色填充样式
gradient_fill = GradientFill(stop=('FFFFFF', '99CCFF', '000000'))

# 应用样式
cell.fill = gradient_fill

stop: passa uma tupla, do número da cor inicial ao número da cor final, que também está no formato hexadecimal HEX

5.6 Definir estilo de borda

# 导入所需模块
from openpyxl.styles import Side, Border
# 设置边框线样式
side = Side(style='thin', color='000000')
border = Border(left=side, right=side, top=side, bottom=side)

Lado define o formato específico da linha de fronteira

estilo: formato de entrada, estilos são os seguintes

‘dashDot’,‘dashDotDot’,‘dashed’,‘dotted’,‘double’,
‘hair’,‘medium’,‘mediumDashDot’,‘mediumDashDotDot’,
‘mediumDashed’,‘slantDashDot’,‘thick’,‘thin’

cor: número da cor HEX

Borda Defina a faixa de aplicação da linha de borda, as mais usadas são para cima, para baixo, esquerda e direita

ll = gradient_fill


stop:传入一个元组,从起始颜色色号至终止颜色色号,同样是十六进制HEX的格式

### 5.6 设置边框样式

```python
# 导入所需模块
from openpyxl.styles import Side, Border
# 设置边框线样式
side = Side(style='thin', color='000000')
border = Border(left=side, right=side, top=side, bottom=side)

Lado define o formato específico da linha de fronteira

estilo: formato de entrada, estilos são os seguintes

‘dashDot’,‘dashDotDot’,‘dashed’,‘dotted’,‘double’,
‘hair’,‘medium’,‘mediumDashDot’,‘mediumDashDotDot’,
‘mediumDashed’,‘slantDashDot’,‘thick’,‘thin’

cor: número da cor HEX

Borda Defina a faixa de aplicação da linha de borda, as mais usadas são para cima, para baixo, esquerda e direita

Acho que você gosta

Origin blog.csdn.net/weixin_45609519/article/details/107933694
Recomendado
Clasificación