目录

  • 一 xlrd基础知识
  • 二 利用xldate处理日期
  • 三 参考文章




一 xlrd基础知识

  1. 载入xlrd模块,并将excel表格导入
import xlrd

data = xlrd.open_workbook('../表格.xls')  # 打开表格
names = data.sheet_names()  # 返回表格中所有表格的名字
table = data.sheets()[0]  # 将表格的第一个sheet存入table变量
  1. 对于表格的简单读取
    其中,x代表行序号,y代表列序号,均是从零开始的非负整数。
cell1 = table.cell_value(x,y)  # 返回单元格的值
row1 = table.row_values(x)  # 返回某一行的元素列表
col1 = table.col_values(y)  # 返回某一列的元素列表

cell2 = table.row_values(x)[y]
cell3 = table.col_values(y)[x]
# 该两行与第一行代码等效,即cell1、cell2与cell内容完全相同
  1. 可能存在的问题
    报错:Excel xlsx file; not supported
    原因:xlrd模块在1.2.0之后的版本不支持xlsx格式,仅支持xls格式。
    解决方案:
    1)卸载当前版本的xlrd模块,安装早于1.2.0的版本;
    2)将xlsx格式的excel文件另存为xls格式。

二 利用xldate处理日期

  1. 有关excel中日期格式的单元格
    1)实际上以 浮点数 的形式存储在单元格中,并不存在“日期”的数据类型;
    2)存在一个 时间基准(datemode) ,不同的时间基准加上浮点数得到的实际日期不同。在一些函数的参数中,0 代表1900-01-01为基准,1 代表1904-01-01为基准,通常WIndows使用前者,Mac使用后者。
  2. 将以浮点数形式存在的日期数据转换为可读的形式
    1)xlrd.xldate_as_tuple(xldate,datemode) 函数
    参数 xldate:要处理的单元格值(或浮点数)
    参数 datemode:时间基准
    返回值:返回元组(year,month,day,hour,minute,nearest_second)
    2)xlrd.xldate.xldate_as_datetime(xldate,datemode) 函数
    参数 xldate:要处理的单元格值(或浮点数)
    参数 datemode:时间基准
    返回值:datetime对象,格式 year-month-day hour:minute:second
    *注:excel的date对象与datetime对象不是同一概念,前者仅仅以 浮点数 的形式存在,并不存在相关的函数或参数,关于后者可以查阅相关的文档说明,在此处不再赘述。


    3)题外话: 关于datetime对象的显示
import xlrd

data = xlrd.open_workbook('../【更新】新闻宣传业务领域志愿者赛时每日到岗、运行情况统计表.xls')  # 打开表格
table = data.sheets()[0]  # 将表格的第一个sheet存入table变量

dt = xlrd.xldate_as_datetime(table.cell_value(56,3),0)
# 用1900年为时间基准,将第0行第3列的单元格值转换为datetime对象

print(type(dt))
print(dt)

print(dt.strftime("%Y/%m/%d"))
print(dt.strftime("%y/%m/%d"))
print(dt.strftime("%x %X"))
print(dt.strftime("%c"))
# 根据一定的格式打印

运行结果如下:

python从excel读取日期为数字 python读取表格日期_python从excel读取日期为数字

日期显示格式与对应的含义:

格式

含义

备注

%y

年份的后两位数字

%Y

四位完整的年份

%j

该日期是一年当中的第几天

范围在001-366之间

%m

月份

%b

简写英文月份

%B

完整英文月份

%d

返回是该月的第几日

%H

小时

24小时制

%I

小时

12小时制

%p

上午或下午

AM或者PM

%M

分钟

%S

秒钟

%x

日期

日/月/年(注意顺序与习惯相反)

%X

时间

时:分:秒

%c

详细日期时间

  1. 将可读形式的日期转换为浮点数(即excel date)
    1)xlrd.xldate.xldate_from_date_tuple(date_tuple, datemode) 函数
    参数date_tuple:上面第2点的(1)返回值形式的日期元组
    参数datemode:时间基准
    返回值:浮点数
import xlrd

data = xlrd.open_workbook('../统计表.xls')
table = data.sheets()[0]

t = xlrd.xldate_as_tuple(table.cell_value(56,3),0) # 由单元格引入的元组
t1 = xlrd.xldate_as_tuple(44619.0,0)  # 直接由浮点数引入的元组

a = xlrd.xldate.xldate_from_datetime_tuple(t,0)  # 将元组逆处理得到浮点数

print(t)
print(t1)
print(a)
print(type(a))

运行结果如下,注意前后浮点数的对照与呼应:

python从excel读取日期为数字 python读取表格日期_python_02



三 参考文章

  1. Excel xlsx file; not supported两种解决办法
  2. xlrd官方文档
  3. 知乎 - Python xlrd读取excel日期类型的2种方法及显示格式