You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 15:24:19