使用openpyxl操作Excel时遇TypeError:str与int无法比较的问题
解决openpyxl中的TypeError: '<' not supported between instances of 'str' and 'int'错误
错误根源在这行代码:
sheet.cell(row=row[0], column=21).value="not found"
你使用了iter_rows(min_row=2, values_only=True),返回的row是单元格值组成的元组。如果第一列(row[0])的内容是字符串类型(比如单元格格式设为文本,或内容本身带非数字字符),直接把它传给sheet.cell()的row参数就会触发报错——因为row参数要求传入整数,而你传了字符串,openpyxl内部处理行号时会执行字符串与整数的比较操作,从而抛出这个类型错误。
以下是两种可行的修复方案:
方案1:将row[0]转换为整数
如果第一列确实存储的是数字行号,只是读取后变为字符串,直接强制转换类型即可:
workbook = openpyxl.load_workbook('file.xlsm') sheet = workbook['Form1'] for row in sheet.iter_rows(min_row=2, values_only=True): # ... 你的其他业务代码 ... if not found: # 把字符串类型的行号转为整数 sheet.cell(row=int(row[0]), column=21).value="not found" continue
注意:如果row[0]包含非数字内容,这种方法会抛出ValueError,需要提前做格式校验。
方案2:不使用values_only=True,直接获取行号
如果不需要提前读取单元格值,或想规避类型转换风险,可以去掉values_only=True,通过Cell对象的row属性直接获取整数行号:
workbook = openpyxl.load_workbook('file.xlsm') sheet = workbook['Form1'] # 去掉values_only=True,返回Cell对象组成的元组 for row_cells in sheet.iter_rows(min_row=2): # 如需第一列的值,可通过row_cells[0].value获取 # ... 你的其他业务代码 ... if not found: # 直接取当前行的整数行号 sheet.cell(row=row_cells[0].row, column=21).value="not found" continue
这种方法更稳妥,row_cells[0].row直接返回当前行的整数行号,不会出现类型不匹配问题。
内容的提问来源于stack exchange,提问作者Matteo Caruso
相关产品推荐
相关产品推荐

