Python进阶之Openpyxl详解

✨前言

openpyxl 是一个用于读取和编辑 Excel 文件(即 .xlsx 格式文件)的 Python 库。以下是 openpyxl 的详细介绍及常见操作示例

✨安装

在使用 openpyxl 之前,需要先安装它。可以通过以下命令安装:

pip install openpyxl

✨加载工作簿

# 加载已经存在的工作簿
wb = openpyxl.load_workbook('example.xlsx')

# 创建一个新的工作簿
wb = openpyxl.Workbook()

✨获取工作表

✨获取所有工作表名称

sheetnames = wb.sheetnames
print(sheetnames)

✨选择特定的工作表

ws = wb['Sheet1']

# 或者也可以使用活动表
ws = wb.active

✨读取数据

✨读取单个单元格的数据

cell_value = ws['A1'].value
print(cell_value)

✨读取多个单元格的数据

for row in ws.iter_rows(min_row=1, max_row=5, min_col=1, max_col=3):
    for cell in row:
        print(cell.value)

✨写入数据

✨写入单个单元格

ws['A1'] = 'Hello World'

✨写入多个单元格

data = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
]

for row in data:
    ws.append(row)

✨保存工作簿

wb.save('example.xlsx')

✨高级操作

✨合并和拆分单元格

✨合并单元格
ws.merge_cells('A1:D1')
ws['A1'] = 'Merged Cells'

✨拆分单元格
ws.unmerge_cells('A1:D1')

✨ 调整列宽和行高

ws.column_dimensions['A'].width = 20
ws.row_dimensions[1].height = 30

✨添加和删除行列

✨插入行

ws.insert_rows(1)

✨删除行

ws.delete_rows(1)

✨插入列

ws.insert_cols(1)

✨删除列

ws.delete_cols(1)

✨Border 和 Side

Border 类用于设置单元格的边框。Side 类用于边框的一部分(比如顶边、底边、左边或右边)。

from openpyxl import Workbook
from openpyxl.styles import Border, Side

# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active

# 定义边框线属性
thin = Side(border_style="thin", color="000000")
thick = Side(border_style="thick", color="FF0000")

# 创建边框对象
border = Border(left=thin, right=thick, top=thin, bottom=thick)

# 将边框应用到单元格 A1
ws['A1'].border = border

# 保存到文件
wb.save('border_example.xlsx')

✨Font

Font 类用于设置单元格中文本的字体样式。

from openpyxl import Workbook
from openpyxl.styles import Font

# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active

# 定义字体样式
font = Font(name='Arial', size=14, bold=True, italic=True, color='FF0000')

# 将字体应用到单元格 A1
ws['A1'].font = font
ws['A1'].value = 'Hello, World!'

# 保存到文件
wb.save('font_example.xlsx')

✨PatternFill

PatternFill 类用于设置单元格的填充样式(背景颜色和填充模式)。

from openpyxl import Workbook
from openpyxl.styles import PatternFill

# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active

# 定义填充样式
fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")

# 将填充样式应用到单元格 A1
ws['A1'].fill = fill

# 保存到文件
wb.save('fill_example.xlsx')

✨get_column_letter

get_column_letter 函数用于将列索引转换为 Excel 列字母。例如,1 -> ‘A’, 2 -> ‘B’, 等等。

from openpyxl.utils import get_column_letter

# 获取列字母
col_letter = get_column_letter(1)
print(col_letter)  # 输出: A

col_letter = get_column_letter(28)
print(col_letter)  # 输出: AB

col_letter = get_column_letter(702)
print(col_letter)  # 输出: ZZ

✨综合示例:

from openpyxl import Workbook
from openpyxl.styles import Border, Side, Font, PatternFill
from openpyxl.utils import get_column_letter

# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active

# 定义边框线属性
thin = Side(border_style="thin", color="000000")
thick = Side(border_style="thick", color="FF0000")

# 创建边框对象
border = Border(left=thin, right=thick, top=thin, bottom=thick)

# 定义字体样式
font = Font(name='Arial', size=14, bold=True, italic=True, color='FF0000')

# 定义填充样式
fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")

# 应用样式到单元格 A1
ws['A1'].border = border
ws['A1'].font = font
ws['A1'].fill = fill
ws['A1'].value = 'Hello, Excel!'

# 获取和显示列字母
for col_idx in range(1, 11):
    col_letter = get_column_letter(col_idx)
    ws[f'{col_letter}2'] = f'Column {col_letter}'

# 保存到文件
wb.save('combined_example.xlsx')

✨Openpyxl和xlrd对比

Openpyxl 和 xlrd 是 Python 中用于处理 Excel 文件的两个非常流行的库,它们各有优势和适用场景。下面是对这两个库的对比和各自的优势:

✨Openpyxl 的优势

读写能力: Openpyxl 可以同时读和写 Excel 文件(.xlsx 格式),这是它的一个巨大优势。它不仅可以读取已有的 Excel 文件,还可以创建和修改 Excel 文件。

支持更多的 Excel 功能: Openpyxl 能够处理 Excel 中的复杂功能,例如图表、公式、数据验证、条件格式化等。这使得它在处理高级 Excel 功能时非常有用。

活跃的维护和更新: Openpyxl 的开发和维护非常活跃,定期更新并解决问题,并且社区较大,有更多的文档和支持。

文件格式: Openpyxl 是专门用于处理 .xlsx 文件(即 Excel 2007 及以上版本),相对而言更加现代化。

✨Openpyxl 的劣势

性能: 因为 Openpyxl 支持更多功能,所以在处理非常大的 Excel 文件时性能可能不如一些专门优化的库。

✨xlrd 的优势

读取能力强: xlrd 是一个非常轻量级的库,专门用于读取 Excel 文件(.xls 格式),其性能和效率在处理大文件时非常高。

适用旧版 Excel 文件: xlrd 特别适合处理 .xls 文件(Excel 2003 及更早版本),因为它是为这些格式专门设计的。

✨xlrd 的劣势

仅支持读取: 自从2020年底后,xlrd 不再支持 .xlsx 文件,并且完整去除了写入功能。如果需要写入功能,需要使用其他库如 xlwt。

功能有限: xlrd 的功能相对简单,不支持复杂的 Excel 功能如图表、数据验证等。

你可能感兴趣的:(Python,python,开发语言,openpyxl)