Uso básico de openpyxl

Uso de openpyxl

1 Estructura básica de Excel

Libro de trabajo: un documento de hoja de cálculo de Excel se llama libro de trabajo, un libro de trabajo se guarda en el .xlsxarchivo de extensión .

Inserte la descripción de la imagen aquí

Hoja: un libro de trabajo puede contener varias hojas (también llamadas hojas de trabajo). La tabla que ve actualmente el usuario (o la última tabla vista antes de cerrar Excel) se llama tabla activa

Inserte la descripción de la imagen aquí

Fila: la fila en la tabla, la dirección es un número que comienza desde 1

Columna: la columna de la tabla, la dirección es la letra que empieza por A

Celda: una celda, una celda compuesta por una fila y columna específicas, se llama celda. Cada celda contiene un número o valor de texto. La cuadrícula y los datos formados por las celdas constituyen la tabla.

Inserte la descripción de la imagen aquí

2 Instale el módulo openpyxl

Python no viene con openpyxl, por lo que debe instalarse por separado antes de que pueda usarse normalmente.

Abra la línea de comando e ingrese en Windows:

pip install openpyxl

Abra la terminal en Mac e ingrese:

pip3 install openpyxl

Si desea probar si la instalación es correcta, puede ingresar el siguiente código en un entorno interactivo:

import openpyxl

Si el módulo está instalado correctamente, no se devolverá ningún mensaje de error después de ejecutar

Enlace al documento oficial de Openpyxl:

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

3 Leer una tabla de Excel existente

Inserte la descripción de la imagen aquí

Ejemplo simple

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 Obtener objetos del libro de trabajo

Después de importar el módulo openpyxl, puede usar el método load_workbook () para leer el archivo de Excel. El método openpyxl.load_workbook () devuelve un objeto de libro de trabajo (también un valor del tipo de datos del libro de trabajo). Para la conveniencia de un uso posterior, generalmente le llamamos wb.

Nota: El método load_workbook () solo puede leer un archivo de tabla de Excel existente y no puede crear una nueva tabla de Excel.

import openpyxl

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

El método openpyxl.load_workbook () puede recibir múltiples parámetros para leer la configuración

nombre de archivo: tipo de cadena, la ruta del archivo para leer el archivo de Excel, puede usar una ruta relativa o una ruta absoluta.

read_only: tipo booleano, seleccione el modo de solo lectura o el modo de lectura y escritura, seleccione el modo de solo lectura para mejorar la velocidad de consulta, el valor predeterminado es Falso.

keep_vba: tipo booleano, mantiene el contenido de vba (esto no significa que pueda usarlo), el valor predeterminado es False.

data_only: tipo booleano. Si se establece en Verdadero, la celda que contiene la fórmula mostrará el último resultado del cálculo o Ninguno. Si se establece en Falso, la celda mostrará la fórmula. El valor predeterminado es Falso. Nota: Abra con data_only = False, y finalmente guarde con la función save (), el archivo xlsx original solo tiene la fórmula data_only = False. Si desea recuperar la fórmula y el resultado, debe abrir el archivo con Excel y guardarlo.

keep_links: tipo booleano, si desea mantener enlaces a libros de trabajo externos. El defecto es cierto.

3.2 Obtener objeto de hoja de trabajo

3.2.1 Obtener todas las hojas de trabajo en el libro de trabajo

Llame al método get_sheet_names () o al atributo sheetnames para obtener todos los nombres de las hojas en el libro de trabajo y devolverlos como una 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 Seleccione la hoja de trabajo a operar

Cada hoja de trabajo está representada por un objeto Hoja de trabajo, que se puede obtener mediante una clave o método similar a un diccionario. Finalmente, también puede obtener la tabla activa a través de wb.active (la última tabla vista antes de cerrar Excel)

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

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

3.2.3 Obtenga algunos atributos en la tabla

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

3.3 Obtener el objeto de celda

3.3.1 Obtener el objeto de celda

Con el objeto de tabla, puede obtener el objeto de celda de acuerdo con las coordenadas o el número de filas y columnas

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

3.3.3 Obtener algunos atributos de una celda

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

3.3.4 Tomar una fila o columna de celdas y devolver un objeto tupla

Puede dividir el objeto de tabla para obtener todos los objetos de celda en una fila, una columna o un área rectangular en la hoja de cálculo. Luego, puede obtener todas las celdas del segmento haciendo un bucle.

# 取一列单元格
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 Cree una nueva tabla de Excel

4.1 Crear una nueva tabla

Para crear una nueva tabla de Excel, debe usar el método openpyxl.Workbook (). De hecho, el método Workbook llama al archivo de plantilla de Excel que viene con openpyxl.

Al modificar el contenido en la tabla de Excel, el archivo de la hoja de cálculo no se guardará automáticamente hasta que usemos el método de libro save ().

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 Algunas operaciones en objetos de tabla

4.2.1 Crear tabla

El método create_sheet () devuelve un nuevo objeto de hoja llamado SheetX, que por defecto es la última hoja del libro de trabajo. O puede usar los parámetros de índice y título para especificar el índice y el nombre de la nueva hoja de trabajo

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

índice: tipo entero, establezca el índice de la nueva hoja de trabajo, el valor predeterminado es Ninguno y colóquelo al final, si se establece en 0, la tabla se coloca en la parte superior.

título: tipo de cadena, establezca el nombre de la nueva hoja de trabajo, si el nuevo nombre de la hoja de trabajo ya existe, el nuevo nombre de la hoja de trabajo se convertirá automáticamente en title1.

4.2.2 Eliminar tabla

El método remove () recibe un objeto de tabla en lugar de una cadena del nombre de la tabla.

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

4.2.3 Copiar tabla

El método copy_worksheet () recibe un objeto de tabla y lo copia y pega

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

4.2.4 Insertar y eliminar filas y columnas en la tabla

Insertar filas y columnas

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')

Eliminar filas y columnas

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 Agregar datos a la tabla

Agregar nuevos datos significa agregar datos a una tabla existente. Solo puede usar el método load_workbook () para leer la hoja de cálculo de Excel.

El método append () acepta un parámetro variable, que incluye, entre otros, una lista, rango, generador o diccionario.

Si pasa en una lista: agregue todos los valores en orden desde la primera columna, el elemento de la lista corresponde a cada fila

Si se pasa un diccionario: el valor se asigna a la columna indicada por la tecla (número o letra)

Nota: adjuntar solo puede agregar una fila de datos a la vez. Si desea agregar varias filas, debe combinarlas con bucles u otros 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 Algunas operaciones en celdas

4.3.1 Modificar datos de celda y definir 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 celdas

Usa el método move_range () para mover celdas

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 panel

Para las hojas de cálculo de Excel con demasiados datos para mostrarse en una pantalla, congelar las filas o columnas requeridas es muy útil.

Con la propiedad freeze_panes, puede establecer una cadena de coordenadas de celda para congelar las filas y columnas arriba y a la izquierda de las coordenadas de la celda, pero las filas y columnas donde se encuentra la celda en sí no se congelarán.

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

5 Modificación de estilo de celda

Establecer el estilo de fuente de ciertas filas o columnas de celdas puede ayudarlo a enfatizar áreas clave en la hoja de cálculo.

Aquí debe utilizar el método Font () en openpyxl.styles

Nota: Una vez que se crea una instancia de los siguientes estilos (fuente, relleno, borde, posición, etc.), las propiedades de la instancia no se pueden cambiar y la instancia solo se puede volver a crear.

5.1 Obtener el estilo de fuente de la celda

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 Establecer el estilo de fuente de la celda

El método Font () puede establecer el estilo de fuente de la celda, las siguientes son algunas configuraciones de parámetros de uso común

# 导入需要的方法
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')

nombre: tipo de cadena, ingrese el nombre de la fuente que se va a configurar.

tamaño: tipo entero positivo, establezca el tamaño de fuente.

negrita: tipo booleano, verdadero significa negrita.

cursiva: tipo booleano, verdadero significa cursiva.

color: tipo de cadena, ingrese el número de color hexadecimal (HEX), como'FFFFFF 'para blanco.

5.3 Establecer clasificación de formato de celda

Puede establecer la clasificación del formato de celda configurando el estilo de celda

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

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

El formato de celda de Excel compatible con openpyxl

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

5.4 Configuración del formato de alineación de celdas

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

# 应用样式
cell.alignment = alignment

Se pueden pasar varios parámetros en la alineación:

horizontal: tipo de cadena, alineación horizontal, correspondiente al formato de alineación de asistencia de Excel

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

vertical: tipo de cadena, alineación vertical, correspondiente al formato de alineación de asistencia de Excel

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

wrap_text: tipo booleano, establece si se ajustará automáticamente

textRotation: tipo entero, establece el ángulo de rotación del texto, el valor máximo es 180

Enlace al documento oficial:

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

5.5 Establecer el estilo de relleno de color

5.5.1 Relleno de color puro

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

# 应用样式
cell.fill = pattern_fill

fill_type: tipo de cadena, establece el estilo de relleno, el utilizado comúnmente es sólido

fgColor: tipo de cadena, ingrese el número de color de color hexadecimal HEX

Nota: En el documento oficial se indica que si no se especifica fill_type, los parámetros posteriores no son válidos

5.5.2 Relleno de color degradado

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

# 应用样式
cell.fill = gradient_fill

stop: pasa en una tupla, desde el número de color inicial hasta el número de color final, que también está en formato hexadecimal HEX

5.6 Establecer estilo de borde

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

Lado establece el formato de línea de borde específico

estilo: formato entrante, los estilos son los siguientes

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

color: número de color HEX

Borde Establezca el rango de aplicación de la línea de borde, las más utilizadas son arriba, abajo, izquierda y derecha

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 establece el formato de línea de borde específico

estilo: formato entrante, los estilos son los siguientes

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

color: número de color HEX

Borde Establezca el rango de aplicación de la línea de borde, las más utilizadas son arriba, abajo, izquierda y derecha

Supongo que te gusta

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