使用xlrd3处理xlsx日期报错,如何将Excel序列日期转为标准格式
问题原因
- 你调用
xldate_as_datetime时传入的第一个参数不符合要求:遍历过程中遇到了空单元格,或者目标单元格格式被设为文本,读取到的值是字符串类型(包括空字符串''),函数要求入参为数值类型,内部做数值范围判断时就会触发类型不匹配的报错。 - 第二个参数
datemode选0即可,它对应Windows版Excel默认的1900年日期基准,完全匹配你提到的44295对应2021年4月9日的需求,选1反而会出现日期偏差。
解决方法
先对读取到的单元格值做有效性校验和类型转换,确认是合法的Excel日期序列号后再做转换,最后直接按你需要的日/月/年格式输出即可,参考代码如下:
import xlrd3 # 原有循环逻辑 for i in range(itemworksheet.nrows): lastsold = itemworksheet.cell_value(i, 32) try: # 尝试转换为数值,兼容字符串类型的数字、空值等异常情况 lastsold_num = float(lastsold) except (ValueError, TypeError): # 转换失败说明不是合法日期值,可根据需求设置默认值或跳过当前行 lastsold_str = "" continue # 转换为datetime对象 lastsold_dt = xlrd3.xldate_as_datetime(lastsold_num, 0) # 格式化为dd/mm/yyyy的字符串 lastsold_str = lastsold_dt.strftime("%d/%m/%Y") # 后续你的业务处理逻辑
补充说明
如果需要排查具体哪一行的数据异常,可以在try代码块前加一行print(f"第{i}行的值:{repr(lastsold)},类型:{type(lastsold)}"),就能快速定位到异常单元格的内容。
内容的提问来源于stack exchange,提问作者Oasis1994
相关产品推荐
相关产品推荐

