OpenPyXl遍历单元格时如何获取当前迭代的行、列索引值
问题描述
我目前需要对若干Excel工作表中的数据进行格式化处理。我是OpenPyXl的全新使用者,对Python也仅处于入门阶段,但具备C、Java等编程语言的较丰富开发经验。核心疑问是:按照当前的单元格循环遍历写法,是否能够获取迭代过程中对应的行索引与列索引?
参考Java遍历逻辑
Java中遍历指定范围单元格时,可以直接通过循环变量拿到当前行列索引,参考实现如下:
for (int row = 2; row < 5; row++) { for (int col = 2; col < 3; col++) { // 此位置可直接通过row、col变量获取当前遍历的行、列索引
当前待验证的Python代码
我想确认在如下代码执行print(cell.value)的位置,是否存在可用变量获取当前对应的行索引与列索引:
from openpyxl import load_workbook wb = load_workbook('reviews-sample.xlsx') print(wb.sheetnames) while True: sheet = input("Enter exact name of sheet to use: ") if sheet in wb.sheetnames: break else: print("Sheet name does not exist!") ws = wb[sheet] # 读取用户选择的工作表 for row in ws.iter_rows(2, 5, 2, 3): # 传入参数依次为min_row, max_row, min_col, max_col,遍历范围为B2:B5 for cell in row: print(cell.value) wb.close()
解答
不需要额外定义计数变量维护索引,遍历得到的cell对象本身就内置了行列索引属性,在打印单元格值的位置直接调用即可:
cell.row:返回整数类型的行号,从1开始计数,和你Java示例里的row循环变量取值逻辑完全一致cell.column:返回整数类型的列号,同样从1开始计数;如果需要Excel中常用的字母格式列标(比如B、C列),可以导入openpyxl内置的get_column_letter工具做转换
修改后的循环段代码可直接验证效果:
# 需要字母格式列标时再导入该工具,不需要可省略 from openpyxl.utils import get_column_letter for row in ws.iter_rows(2, 5, 2, 3): for cell in row: current_row = cell.row current_col = cell.column current_col_label = get_column_letter(current_col) print(f"单元格位置:{current_col_label}{current_row},值:{cell.value}")
你当前使用的iter_rows双层遍历逻辑和Java的嵌套for循环遍历逻辑完全匹配,返回的行列索引是Excel原生的1起始编号,不需要额外做数值偏移,直接使用即可。
内容的提问来源于stack exchange,提问作者jakewags01
相关产品推荐
相关产品推荐

