Openpyxl是一个用于处理Excel文件的Python库,可以读取、写入、修改Excel文件。
官方文档介绍:openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files — openpyxl 3.1.2 documentation
在学习openpyxl之前,我们来对比下Openpyxl和Pandas的优势:
如果您只需要读取和写入Excel文件,并对Excel的一些特殊格式进行处理,那么Openpyxl是一个不错的选择。
如果需要对数据进行处理和分析,并且数据源不仅限于Excel文件,那么Pandas则是一个更好的选择。
1.安装openpyxl
pip install openpyxl
import openpyxl
2.Sheet增删改查
from openpyxl import load_workbook
from openpyxl import Workbook
#创建工作簿对象
workbook = Workbook()
# 加载工作簿
workbook = load_workbook('example.xlsx')
# 默认第一个sheet为active
first_sheet = workbook.active
# 获取第二个Sheet
second_sheet = workbook.worksheets[1]
#worksheets属性是一个列表,包含了工作簿中所有的Sheet,默认第一个索引值为0,第二个Sheet的索引值则为1。
#也可以手动指定sheet的名称来操作sheet
ws1 = wb["IP_Address"]
ws2 = wb["ACL_DESC"]
例如,我们要循环查询所有的sheet对应的名称:
from openpyxl import load_workbook
# 加载工作簿
workbook = load_workbook('example.xlsx')
# 遍历所有的Sheet
for sheet in workbook.worksheets:
print(f"Sheet名称:{sheet.title}")
修改sheet的名称:
from openpyxl import load_workbook
# 加载工作簿
workbook = load_workbook('example.xlsx')
# 获取要修改的Sheet
sheet = workbook['Sheet1']
# 修改Sheet的名称
sheet.title = 'New Name'
# 保存修改后的工作簿
workbook.save('example.xlsx')
3.单元格的增删改查
要读取Openpyxl工作簿中单元格的值,可以使用cell()方法。cell()方法接受两个参数,分别是单元格的行号和列号,返回对应单元格的值。例如:
from openpyxl import load_workbook
# 加载工作簿
workbook = load_workbook('example.xlsx')
# 获取Sheet
sheet = workbook['Sheet1']
# 读取单元格的值
value = sheet.cell(row=1, column=1).value
print(value)
#使用cell()方法读取第1行、第1列单元格的值。
要写入Openpyxl工作簿中单元格的值,可以使用cell()方法。cell()方法接受两个参数,分别是单元格的行号和列号,可以使用赋值操作写入单元格的值。例如:
from openpyxl import load_workbook
# 加载工作簿
workbook = load_workbook('example.xlsx')
# 获取Sheet
sheet = workbook['Sheet1']
# 写入单元格的值
sheet.cell(row=1, column=1, value='Hello')
# 保存修改后的工作簿
workbook.save('example.xlsx')
#使用cell()方法写入第1行、第1列单元格的值为Hello。最后使用save()方法将修改后的工作簿保存回原文件。
在openpyxl中,可以使用insert_cols()和insert_rows()方法来插入单元格,使用delete_cols()和delete_rows()方法来删除单元格。
插入行以及列:
from openpyxl import Workbook
# 创建一个新的工作簿
wb = Workbook()
# 选择一个工作表
ws = wb.active
# 在第2列之后插入2列
ws.insert_cols(2, amount=2)
# 将数据写入新的单元格
ws['B1'] = 'New Column 1'
ws['C1'] = 'New Column 2'
# 将数据写入新的单元格
ws['A2'] = 'New Row 1'
ws['A3'] = 'New Row 2'
# 保存工作簿
wb.save('example.xlsx')
删除行以及列:
from openpyxl import load_workbook
# 加载现有的工作簿
wb = load_workbook('example.xlsx')
# 选择一个工作表
ws = wb.active
# 删除第2行
ws.delete_rows(2)
# 删除第2列
ws.delete_cols(2)
# 保存工作簿
wb.save('example.xlsx')
4.字体以及颜色的设置:
作者:小网工
链接:https://zhuanlan.zhihu.com/p/613708574
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, Border, Side
# 创建一个新的工作簿
wb = Workbook()
# 选择要写入数据的工作表
ws = wb.active
# 向单元格写入数据
ws['A1'] = 'Hello, World!'
# 设置单元格的字体
font = Font(name='Arial', size=16, bold=True, italic=False, underline='none', color='FF0000')
ws['A1'].font = font
# 设置单元格的对齐方式
alignment = Alignment(horizontal='center', vertical='center', wrap_text=False)
ws['A1'].alignment = alignment
# 设置单元格的边框
border = Border(left=Side(style='thin', color='000000'),
right=Side(style='thin', color='000000'),
top=Side(style='thin', color='000000'),
bottom=Side(style='thin', color='000000'))
ws['A1'].border = border
# 保存工作簿
wb.save('example.xlsx')
可以使用workbook.worksheets属性来访问工作簿中的所有工作表,该属性返回一个工作表对象列表。可以使用for循环遍历所有工作表,并使用title属性来访问每个工作表的名称。可以使用ws.max_row和ws.max_column属性来获取工作表中的最大行数和最大列数。
from openpyxl import load_workbook
# 加载现有的工作簿
wb = load_workbook('example.xlsx')
# 遍历所有工作表
for ws in wb.worksheets:
# 打印工作表的名称
print(f"工作表名称:{ws.title}")
# 打印工作表的数据范围
max_row = ws.max_row
max_col = ws.max_column
print(f"数据范围:A1:{ws.cell(row=max_row, column=max_col).coordinate}")
# 打印每个单元格的值
for row in ws.iter_rows(min_row=1, min_col=1, max_row=max_row, max_col=max_col):
for cell in row:
print(cell.value, end='\t')
print()
from openpyxl import Workbook
from openpyxl.styles import PatternFill, Font
# 创建一个工作簿
wb = Workbook()
# 创建一个工作表
ws = wb.active
# 给单元格A1填充颜色
fill = PatternFill(start_color='FFC7CE', end_color='FFC7CE', fill_type='solid')
ws['A1'].fill = fill
# 给单元格B1字体填充颜色
font = Font(color='FF0000')
ws['B1'].font = font
# 保存工作簿
wb.save('example.xlsx')
下面是一些常用的Worksheet类的方法和属性,它们可以用于对单元格区域进行聚合计算或获取单元格区域的信息:
使用max()和min()方法来获取单元格区域内的最大值和最小值。
sum(range):计算单元格区域中数值类型单元格的和。
count(range):计算单元格区域中单元格的数量,包括空单元格和非空单元格。
average(range):计算单元格区域中数值类型单元格的平均值。
variance(range):计算单元格区域中数值类型单元格的方差。
这些方法接受一个单元格区域作为参数。例如,可以将单元格区域'A1:C3'传递给这些方法,以对该区域内的单元格进行聚合计算。
Worksheet类还有一些属性可以用于获取单元格区域的信息:
max_row:获取单元格区域中最大行号。
max_column:获取单元格区域中最大列号。
dimensions:获取单元格区域的维度,返回的是一个字符串表示,例如'A1:C3'。
这些属性可以通过在单元格区域上调用它们来使用,例如ws['A1:C3'].max_row。这些属性提供了获取单元格区域信息的快捷方式。
下面是一个例子,最大行号和最大列号 这两个遍历时比较常用。
from openpyxl import load_workbook
# 加载现有的工作簿
wb = load_workbook('example.xlsx')
# 获取第一个工作表
ws = wb.worksheets[0]
# 获取单元格区域内的最大值和最小值
max_value = ws['A1:C3'].max()
min_value = ws['A1:C3'].min()
# 计算单元格区域中数值类型单元格的和
total = ws.sum('A1:C3')
# 获取单元格区域的最大行号和最大列号
max_row = ws['A1:C3'].max_row
max_column = ws['A1:C3'].max_column
# 打印最大值和最小值
print(f"最大值:{max_value}")
print(f"最小值:{min_value}")
print(f"和:{total}")
# 打印最大行号和最大列号
print(f"最大行号:{max_row}")
print(f"最大列号:{max_column}")