http://blog.donews.com/limodou/archive/2005/07/08/459100.aspx
最近在我正在开发的一个数据维护工具中我经常使用 xlrd 来读取Excel文件,在转换过程中一直也没有遇到什么问题,只不过需要注意,它返回的字符串都是 Unicode 编码。不过今天在使用时发现对于日期类型,在Excel文件中看到的可能是 "2005-7-8" 这样格式,但直接使用 xlrd 来读的话却会变成 38541。很奇怪。仔细查看 Excel 后再经过试验,我明白了 Excel 保存日期其实是使用一个长整数,只不过显示时可以为标准的日期格式。本来我想将日期在 Excel 中直接转为日期格式的字符串,但没整出来,而且我更希望有一种方法可以正确地进行转换。于是我想 xlrd 有没有这样的处理呢?使用 NewEdit 的代码提示功能,查了查 xlrd 模块的属性,没找到。不过看到它有cell_type(i, j)的方法可以返回一个单元格的数据格式。于是我使用这个方法打出日期所在的单元格的格式为:3。然后又比较了 xlrd 中定义的一些常量,最后锁定在了 XL_CELL_DATE上,它的值就是 3。这样到目前为止我已经知道了如何判断一个单元格是否是日期类型,下面就是如何转换了。
我查阅了datetime 模式,在它的date类中查到一个函数叫:
fromordinal(oridnal)
它的作用是将从公元1年1月1日开始的天数转换为年月日的形式。于是我试了一下:
>>> import datetime
>>> datetime.date.fromordinal(38541)
datetime.date(106, 7, 10)
好象不对呀。于是我反向转转试试:
>>> datetime.date.toordinal(datetime.date(2005, 7, 8))
732135
怎么这么大的数。后来我想到可能fromordinal与Excel使用的起始日期可能是不同的。做个减法看一看是哪天。
>>> datetime.date.fromordinal(732135 – 38541 + 1)
datetime.date(1899, 12, 31)
原来如此,是 1899/12/31 日,这回我明白了。其实象用过的 Informix 中的日期与 Excel 的方法是一样的,都是从 1899/12/31 开始计算的。那么做个转换函数吧:
__s_date = datetime.date(1899, 12, 31).toordinal() – 1
def getdate(date):
if isinstance(date, float):
date = int(date)
d = datetime.date.fromordinal(__s_date + date)
return d.strftime("%Y-%m-%d")
上述函数就是用来将一个从 1899/12/31 开始计算的天数转成年月日的格式,并且是字符串的形式。其中如果传入的是一个浮点数,先取整再进行转换。
------------------------------------------------------------------------------------------------------------------------------------
3条评论
上次limodou介绍了之后,我马上就派上用场了,确实速度够快,可惜只能读,不能写。
xlp223 —— 2005年07月09日 @11:35 am
还有一个 pyExcelerator 可以写Excel文件。http://sourceforge.net/projects/pyexcelerator/
limodou —— 2005年07月09日 @5:20 pm
用xlrd模块读取excel,取出来的都是unicode,所以excel里面的中文汉字只能以unicode 显示,请问应该怎么样做才能以正常的中文显示,代码如下(代码是从xlrd模块的示例程序):
分享到:
相关推荐
本文实例讲述了Python使用xlrd模块操作Excel数据导入的方法。分享给大家供大家参考。具体分析如下: xlrd是一个基于python的可以读取excel文件的产品。和pyExcelerator相比,xlrd的主要特点在于读的功能比较强大,...
xlrd模块是在运行python脚本读取excel表格数据并进行计算前导入
本文实例讲述了python使用xlrd模块读写Excel文件的方法。分享给大家供大家参考。具体如下: 一、安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境。 二、使用...
用python3中xlrd模块读取excel格式加班时间记录,计算加班时间并用xlwt模块写入新的excel
最近遇到了一个问题,给定了一个Excel模板,修改表格里面的内容,但是不能修改Excel表格的格式。用pywin32太慢,用xlrd只能读,用xlwt只能写。 很快,我查到了网上“修改Excel内容但保留格式”的方法,大概是需要...
Python做数据分析操作Excel时主要用到xlrd和xlwt这两个模块库,其中xlrd对Excel进行读操作,而xlwt是写操作。 安装xlrd模块 1.在Python环境下,去官网下载安装http://pypi.python.org/pypi/xlrd 2.pip安装 pip ...
主要介绍了Python基于xlrd模块操作Excel的方法,结合实例形式分析了xlrd模块的安装及Python使用xlrd模块模块进行Excel的读写相关操作技巧,需要的朋友可以参考下
python对excel处理的xlwt xlrd模板
python 读取excel文档的模块----------xlrd。
python课时13【视频讲解】1.1 读写 用必备利器 xlrd + xlwt 读写 Excel
那我就一下面积个问题对xlrd模块进行学习一下: 什么是xlrd模块? 为什么使用xlrd模块? 1.什么是xlrd模块? :diamond_suit:python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。 ...
python能使用xlrd模块实现对Excel数据的读取,且按照想要的输出形式。 总体思路: (1)要想实现对Excel数据的读取,需要用到第三方应用,直接应用。 (2)实际操作时候和我们实际平时打开一个文件进行操作一样,先...
1、将文件解压,放到C:\Python27\Lib\site-packages目录下。 2、打开命令窗(快捷键...3、在命令窗中输入cd C:\Python27\Lib\site-packages\xlrd-0.9.3敲回车。 4、再输入python setup.py install即可完成插件的安装。
本文介绍了python中使用xlrd模块操作excel表格的常用操作。包括读取表格内容、写入表格,提供demo代码等。
python excel xlrd xlwt python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库.
目录一、使用xlrd读取excel二、使用xlrd + xlutils写入数据三、使用xlwt设置样式常见问题1.PermissionError2.NotImplementedError3.Excel无法打开文件”xxx.xlsx” 简介 库 主要功能 支持excel xlrd 读取...