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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:54:05