Python与Excel之一 xlrd读取excel

背景:

最近在工作遇到一个情景,需要把产品给具的excel文档入各种DB。打算用python脚本一个比较通用的实现。计划用python读取excel中的内容。上网搜罗了一番,发现xlrd相当强大,已经基本满足要求。所以将xlrd基本功能,做了些总结。

基本功能:

一,与其他python扩展库一样,如果想要用xlrd.就需要 载入xlrd的代码。在python官网有提供下载。
https://pypi.python.org/pypi/xlrd
二,涉及excel的主要接口。
1, open_workbook() 打开excel文件,返回的xlrd.Book对象包含了所有的工作簿,能被用来取得独立的sheet。
简单用法如:workBooks = xlrd.open_workbook(‘test.xls’)
2,获取工作簿的方式
sheet = sheet_by_name() 通过名字获取工作簿。用法如: workBooks.sheet_by_name(‘PROFILEDEF’)
不知道工作簿名称的时候可以:
sheet = workBooks.sheet_names()[i] i表示索引,从0开始
或者:
sheet = workbook.sheet_by_index(i)
3,获取工作簿之后,就可以着手读取Excel内的数据了。、
获取总行数和总列数:
nrows = sheet.nrows
ncols = sheet.ncols
获取单元格数据:
cell = sheet.cell(i, j)
cell.value 里面存储了对应单元格里的数据。
cell.ctype 存储的类型。type类型
这里写图片描述
获取合并单元格的数据:
got = sheet2.merged_cells 返回所有的合并单元格。返回类型如:[(0, 1, 0, 2), (0, 1, 2, 4), (1, 4, 0, 2), (1, 9, 2, 4)]的列表,列表的成员是个元组。分别表示row_lo, ro_hig, col_lo, col_hi
cell = sheet.cell(i, j) i,j分别用row_lo col_lo即可获取对应的合并单元格数据。

疑难的问题:

excel中的日期是以float格式存储的。所以我们用脚本读取出来的会是一个float的数据。如果想要展示成自己想要的数据需要做一些特殊的转化。好在python对时间的转换及其方便。
当excel单元格的数据是日期的时候。也就是ctype的值是3。我们需要用到。
date = xlrd.xldate_as_tuple(sheet3.cell(10,1).value,workBooks.datemode)//函数返回如(2017, 6, 10, 12, 12, 59)
对xldate_as_tuple的返回结果用strDate=”%04d-%02d-%02d %02d:%02d:%02d” % date处理即可

例子:

Excel原始数据:
这里写图片描述
python读取代码:

# encoding:utf-8

import sys
sys.path.append('D:\\program\\xlrd-1.0.0')
import xlrd
book = xlrd.open_workbook(r'D:\program\xlrd-1.0.0\tests\merged_cells.xlsx')
sheet = book.sheet_by_name('Sheet5')
print sheet.nrows
#读取普通单元格
print sheet.cell(0,0).value
#读取所有的合并单元格坐标
print sheet.merged_cells
#输出结果类似:[(1, 3, 3, 4), (3, 5, 3, 4)]
print sheet.cell(3,3).value
print sheet.cell(3,3).ctype
#读取时间
print sheet.cell(2,2).ctype
print sheet.cell(2,2).value
#时间转换
date = xlrd.xldate_as_tuple(sheet.cell(2,2).value,book.datemode)
print date
strDate="%04d-%02d-%02d %02d:%02d:%02d" % date
print strDate
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值