IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

xlrd 读取 xls (excel)的日期、时间单元格的问题

" 人可 2011-09-19 23:46:17 累计浏览 2,502 次
本机暂存

    xlrd 是python 的xls处理扩展包,常用来读取xls文件:

    遇到的问题:

    1. 解析日期2005-7-8这样的单元格后,print 出来的是整数:38541

    2. 解析日期12:35:00这样的单元格,print出来时浮点数:0.524305555556

    处理日期和时间就卡住了,转换起来也很麻烦,因为在xls内部就是按照长整型和浮点数来存储日期和时间的。搜索后发现很多人都碰到这个问题:

limodou 自己去写了计算方法:

    使用xlrd模块时对Excel的日期处理

    思路确实是把整形转化成datetime对象即可。

    解决方式:

    其实xlrd本身就带有这个功能了,在xlrd的example里面就有。

    xlrd.xldate_as_tuple(cell_value, 0)

    @param datemode 0: 1900-based, 1: 1904-based.

    其中cell_value是单元格的值,如何读取就省略了先。

    这样12:35:00格式的时间久可以转化成:(0, 0, 0, 12, 35, 0)

    datetime读取这个tuple就好。

    再附上转化时间的源码:

def xldate_as_tuple(xldate, datemode):
    if datemode not in (0, 1):
        raise XLDateBadDatemode(datemode)
    if xldate == 0.00:
        return (0, 0, 0, 0, 0, 0)
    if xldate < 0.00:
        raise XLDateNegative(xldate)
    xldays = int(xldate)
    frac = xldate - xldays
    seconds = int(round(frac * 86400.0))
    assert 0 <= seconds <= 86400     if seconds == 86400:         hour = minute = second = 0          xldays += 1     else:         # second = seconds % 60; minutes = seconds // 60         minutes, second = divmod(seconds, 60)          # minute = minutes % 60; hour    = minutes // 60         hour, minute = divmod(minutes, 60)      if xldays >= _XLDAYS_TOO_LARGE[datemode]:
        raise XLDateTooLarge(xldate)

    if xldays == 0:
        return (0, 0, 0, hour, minute, second)

    if xldays < 61 and datemode == 0:         raise XLDateAmbiguous(xldate)     jdn = xldays + _JDN_delta[datemode]     yreg = (ifd(ifd(jdn * 4 + 274277, 146097) * 3, 4) + jdn + 1363) * 4 + 3      mp = ifd(yreg % 1461, 4) * 535 + 333      d = ifd(mp % 16384, 535) + 1      # mp /= 16384     mp >>= 14
    if mp >= 10:
        return (ifd(yreg, 1461) - 4715, mp - 9, d, hour, minute, second)
    else:
        return (ifd(yreg, 1461) - 4716, mp + 3, d, hour, minute, second)

同分类推荐文章

  1. Vibe新开源项目 - Vaala AI Gateway (2026-05-17 02:10:19)
  2. SmartPerfetto 架构文章 Q&amp;A:8 个深度技术问答 (2026-04-10 11:00:00)
  3. 让 AI 把我的 PHP 博客重写成 Go (2026-03-27 18:33:54)

查看更多 后端 文章 →

建议继续学习

  1. 用Hyer来进行网站的抓取 (累计阅读 158,162)
  2. 配置Nginx+uwsgi更方便地部署python应用 (累计阅读 106,964)
  3. 神马?用excel来做项目管理? (累计阅读 43,220)
  4. 程序员技术练级攻略 (累计阅读 35,184)
  5. python实现自动登录discuz论坛 (累计阅读 32,720)
  6. python编程细节──遍历dict的两种方法比较 (累计阅读 20,280)
  7. 每个程序员都应该学习使用Python或Ruby (累计阅读 17,821)
  8. Chrome和goagent的配置方法,你懂的 (累计阅读 16,680)
  9. 30分钟3300%性能提升――python+memcached网页优化小记 (累计阅读 13,660)
  10. 使用python爬虫抓站的一些技巧总结:进阶篇 (累计阅读 13,182)