openpyxl中Worksheet.row_dimensions类型提示异常及传入整数触发警告的问题
openpyxl中Worksheet.row_dimensions类型提示异常及传入整数触发警告的问题
你遇到的这个情况我之前在项目里也碰见过,明明代码运行完全正常,行高确实设置成功了,但类型检查工具偏要跳出警告,还不能用#noqa来忽略,确实挺闹心的😅
问题根源
这个警告其实是openpyxl的类型注解和实际运行逻辑不匹配导致的:
- 官方给
Worksheet.row_dimensions的类型定义里,要求传入的行索引必须是字符串类型(比如"1") - 但实际的运行代码是兼容整数索引的(比如
1),所以代码能跑通,但类型检查器(比如Pyright、Mypy)会因为不符合类型注解而抛出警告
解决方法
既然不能忽略警告,那我们就严格按照类型注解的要求来写代码,同时不影响功能,给你两个实用方案:
方案1:直接将整数转为字符串传入
这是最直接的无侵入方案,只需要把你原来的代码改一行:
# 原来的代码(触发警告) ws.row_dimensions[1].height = 25 # 修改后的代码(无警告) ws.row_dimensions[str(1)].height = 25
这样既完全符合类型注解的要求,类型检查器不会再报错,同时运行逻辑和原来完全一致,行高设置正常。
方案2:封装工具函数简化调用
如果你需要频繁设置行高,不想每次都手动转字符串,可以自己封装一个小函数:
import openpyxl from openpyxl.worksheet.worksheet import Worksheet def set_row_height(ws: Worksheet, row_index: int, height: float): """给指定行设置高度,自动处理类型转换""" ws.row_dimensions[str(row_index)].height = height # 调用示例 wb = openpyxl.load_workbook('your_workbook.xlsx') ws: Worksheet = wb.active set_row_height(ws, 1, 25) wb.save('your_workbook.xlsx')
这样每次调用的时候直接传整数就行,内部自动转成字符串,既符合类型要求,又能保持代码的可读性。
补充说明
你用的openpyxl 3.1.2是目前的最新稳定版,这个类型注解的小问题暂时还没被官方修复,但我们通过上面的方法完全可以绕开,而且不会对代码的功能和可维护性造成影响。
备注:内容来源于stack exchange,提问作者FluidMechanics Potential Flows
相关产品推荐
相关产品推荐

