使用openpyxl读取Excel如何实现行号自动递增,无需手动写row+=1
openpyxl 自动行号递增读取方案
下面提供两种可直接落地的实现方式:
方案1:生成器实现(轻量首选)
通过生成器自动记录当前读取行位置,每次调用next()即可拿到下一行指定列的值,无需手动维护行号变量。
完整示例代码
import openpyxl # 通用列读取生成器 def iter_column(sheet, start_row: int = 1, target_col: int = 1): current_row = start_row while True: # 超出表格最大行时自动停止迭代 if current_row > sheet.max_row: return yield sheet.cell(row=current_row, column=target_col).value current_row += 1 # 业务代码 path = "..//excel//testdata.xlsx" sheetName = "sheet1" workbook = openpyxl.load_workbook(path) sheet = workbook[sheetName] # 初始化生成器,指定起始行和目标列 col_reader = iter_column(sheet, start_row=1, target_col=1) # 直接取值即可,无需手动管理row+=1 x = next(col_reader) y = next(col_reader) z = next(col_reader) print("value of x : " ,x) print("value of y : " ,y) print("value of z : " ,z)
额外优化点
如果需要一次性读取连续N行的值,可直接用解包语法简化代码:
# 一次性读取前3行的值 x, y, z = [next(col_reader) for _ in range(3)]
方案2:封装类实现(灵活适配多场景)
如果需要支持不同列的读取、自定义行号跳转等更复杂的需求,可以封装为工具类:
工具类代码
class AutoIncRowReader: def __init__(self, sheet, start_row: int = 1, default_col: int = 1): self.sheet = sheet self.current_row = start_row self.default_col = default_col def get_next(self, col: int = None): """读取下一行指定列的值,默认使用初始化时指定的列""" use_col = col if col is not None else self.default_col cell_val = self.sheet.cell(row=self.current_row, column=use_col).value self.current_row += 1 return cell_val def skip_rows(self, count: int = 1): """跳过指定行数""" self.current_row += count
使用示例
# 初始化读取器 reader = AutoIncRowReader(sheet, start_row=1, default_col=1) x = reader.get_next() y = reader.get_next() # 可以临时指定读取其他列,同样会自动递增行号 other_col_val = reader.get_next(col=2) # 跳过2行 reader.skip_rows(2) z = reader.get_next()
内容的提问来源于stack exchange,提问作者Karthik Manjrekar
相关产品推荐
相关产品推荐

