Python-openpyxl高级操作
获取单元格属性
单元格基本信息
除了 value(值),单元格还有以下常用属性:
| 属性 | 说明 | 示例 |
|---|---|---|
cell.row | 行号(从1开始) | 2 |
cell.column | 列号(从1开始) | 2 |
cell.coordinate | 坐标 | 'B2' |
cell.value | 单元格值 | '李白' |
代码示例:
from openpyxl import load_workbook filePath = r'D:\王者小学.xlsx' workbook = load_workbook(filePath) sheet = workbook["花名册"] # 获取单元格 cell = sheet["B2"] # 李白 cell2 = sheet["C4"] # 96 # 打印单元格属性 print(f"单元格 {cell.coordinate}:") print(f" 行号: {cell.row}") print(f" 列号: {cell.column}") print(f" 值: {cell.value}") print(f"\n单元格 {cell2.coordinate}:") print(f" 行号: {cell2.row}") print(f" 列号: {cell2.column}") print(f" 值: {cell2.value}")运行结果:
单元格 B2: 行号: 2 列号: 2 值: 李白 单元格 C4: 行号: 4 列号: 3 值: 96应用场景:
- 遍历单元格时需要知道当前位置
- 根据行列号进行条件判断
- 动态生成坐标
获取区域数据进阶
按列获取数据:sheet.iter_cols()
上一篇我们学了 iter_rows() 按行获取数据,现在学习 iter_cols() 按列获取:
from openpyxl import load_workbook filePath = r'D:\王者小学.xlsx' workbook = load_workbook(filePath) sheet = workbook["花名册"] # 按列获取数据(第1-2列,第1-4行) print("按列获取数据:\n") for col in sheet.iter_cols(min_row=1, max_row=4, min_col=1, max_col=2): print(f"列数据: {[cell.value for cell in col]}")运行结果:
按列获取数据: 列数据: ['学号', '1', '2', '3'] 列数据: ['姓名', '李白', '甄姬', '后羿']对比记忆:
iter_rows()→ 横向遍历,一行一行读取iter_cols()→ 纵向遍历,一列一列读取
快速获取所有行列:sheet.rows / sheet.columns
from openpyxl import load_workbook filePath = r'D:\王者小学.xlsx' workbook = load_workbook(filePath) sheet = workbook["花名册"] # 获取所有行 print("所有行数据:") for row in sheet.rows: print([cell.value for cell in row]) # 获取所有列 print("\n所有列数据:") for col in sheet.columns: print([cell.value for cell in col])效果等同于:
sheet.rows=sheet.iter_rows()sheet.columns=sheet.iter_cols()
注意:这两个属性会加载所有数据,大数据量时建议使用 iter_rows() / iter_cols()
行列操作
插入空行/空列
| 方法 | 语法 | 说明 |
|---|---|---|
| 插入行 | sheet.insert_rows(idx, amount) | 在 idx 行前插入 amount 行 |
| 插入列 | sheet.insert_cols(idx, amount) | 在 idx 列前插入 amount 列 |
代码示例:
from openpyxl import load_workbook filePath = r'D:\王者小学.xlsx' workbook = load_workbook(filePath) sheet = workbook['花名册'] # 在第3行前插入2行空行 sheet.insert_rows(idx=3, amount=2) # 在第2列前插入1列空列 sheet.insert_cols(idx=2, amount=1) workbook.save(r'D:\王者