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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:00:06