使用Python和openpyxl遍历行时的列取值报错求助
解决openpyxl遍历Excel时获取对应行B列数据的报错问题
你的报错根源在于代码里的单元格坐标写法错误:currentSheet['B''row'].value会被Python自动拼接成字符串'Brow',这显然不是一个合法的Excel单元格坐标,所以触发了ValueError。
结合你使用的openpyxl 2.4.9版本,我给你两种修正方案:
方案一:同时遍历A、B列(更高效)
直接在遍历的时候同时获取每行的A和B单元格,这样不用额外去查找B列,代码更简洁:
import openpyxl wb = openpyxl.load_workbook('worksheet.xlsx') # 切换到索引为1的工作表(对应你原来的wb.active=1操作) currentSheet = wb.worksheets[1] # 遍历从最小行到最大行的1-2列(A和B列) for row in currentSheet.iter_rows(min_row=currentSheet.min_row, max_row=currentSheet.max_row, min_col=1, max_col=2): a_cell, b_cell = row # 检查A列单元格是否为空 if not a_cell.value: print(b_cell.value)
方案二:基于A列单元格获取对应行的B列
如果你还是想单独遍历A列,可以通过A列单元格的row属性拿到行号,再构造B列的单元格坐标:
import openpyxl wb = openpyxl.load_workbook('worksheet.xlsx') currentSheet = wb.worksheets[1] for row in currentSheet.iter_rows('A{}:A{}'.format(currentSheet.min_row, currentSheet.max_row)): a_cell = row[0] if not a_cell.value: # 用A列单元格的行号构造B列单元格地址 b_cell = currentSheet['B{}'.format(a_cell.row)] print(b_cell.value)
另外补充一点:你原来代码里currentSheet = wb[sheets[n]]的写法,要确保n的值是正确的工作表索引(从0开始),如果是要切换到第二个工作表,n应该是1,和你设置wb.active=1的逻辑一致。
内容的提问来源于stack exchange,提问作者hobonoobo
相关产品推荐
相关产品推荐

