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 类用于边框的一部分(比如顶边、底边、左边或右边)。
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 类用于设置单元格中文本的字体样式。
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 类用于设置单元格的填充样式(背景颜色和填充模式)。
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 函数用于将列索引转换为 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 是 Python 中用于处理 Excel 文件的两个非常流行的库,它们各有优势和适用场景。下面是对这两个库的对比和各自的优势:
读写能力: Openpyxl 可以同时读和写 Excel 文件(.xlsx 格式),这是它的一个巨大优势。它不仅可以读取已有的 Excel 文件,还可以创建和修改 Excel 文件。
支持更多的 Excel 功能: Openpyxl 能够处理 Excel 中的复杂功能,例如图表、公式、数据验证、条件格式化等。这使得它在处理高级 Excel 功能时非常有用。
活跃的维护和更新: Openpyxl 的开发和维护非常活跃,定期更新并解决问题,并且社区较大,有更多的文档和支持。
文件格式: Openpyxl 是专门用于处理 .xlsx 文件(即 Excel 2007 及以上版本),相对而言更加现代化。
性能: 因为 Openpyxl 支持更多功能,所以在处理非常大的 Excel 文件时性能可能不如一些专门优化的库。
读取能力强: xlrd 是一个非常轻量级的库,专门用于读取 Excel 文件(.xls 格式),其性能和效率在处理大文件时非常高。
适用旧版 Excel 文件: xlrd 特别适合处理 .xls 文件(Excel 2003 及更早版本),因为它是为这些格式专门设计的。
仅支持读取: 自从2020年底后,xlrd 不再支持 .xlsx 文件,并且完整去除了写入功能。如果需要写入功能,需要使用其他库如 xlwt。
功能有限: xlrd 的功能相对简单,不支持复杂的 Excel 功能如图表、数据验证等。