python使用xlrd和xlwt处理excel文件

最近有需要使用代码来处理excel表格的小task,原来是用手动复制的方式完成的,感觉效率低下而且还弄的头昏脑涨。于是决定写一个python脚本完成这种体力劳动,写好脚本,只需要run一下,一切搞定,好了不多说了,进入正文。

任务主要是对xls读和写,网上找了一下资料就选择了xlrd来完成excel表格的读取,xlwt完成excel表格的写入。xlutils的功能实际上更加强大和全面,包含渡河写的功能,小伙伴们实际上也可以选择这个宝来完成对excel表格的处理,具体可以参见http://www.python-excel.org/的说明。

excel表格的类说明

Workbook类

对应excel的工作簿,也就是对应一个xls文件。类封装了需要写入xls文件的数据,和一系列的操作。属于xlwt package下,用于写和产生xls文件,读xls文件对应使用xlrd package下的Book类

构造函数原型

Workbook(encoding='ascii',style_compression=0)

Worksheet类

对应一个工作簿中的工作表,包含工作表的内容和一系列的操作,属于 xlwt package下,主要用于产生一个Workbook下的一张工作表,对应xlrd包下的Sheet类。

构造函数原型

Worksheet(sheetname, parent_book)

Cell模块

在xlwt package下有一个Cell模块其中定义了很多种类的cell类,对应excel表格中的单元格,xlrd下邮单一的Cell类用来存储读取到的单元格数据

xlrd读取表格

#-*-coding:utf-8-*-
__author__ = 'LiGaofeng'

from xlrd import *

book = open_workbook('original.xls') #读入整个xls文件,返回一个Book实例
sht_chkSeq = book.sheet_by_index(0)  #通过索引读表
sht_ref = book.sheet_by_index(1)  #
sht_walking = book.sheet_by_name('walking')  #通过sheet名字读表

val_col = sht_chkSeq.col_values(0,1) #读sheet的第0列数据,从第1行开始,可以指定结束行,不指定默认到末尾
val_cell = sht_chkSeq.cell_value(0,1) #读sheet第0行第1列单元格的数据,读出的数据是str,如果需要用作数字处理需要转换
val_row = sht_chkSeq.row_values(0,1, 6) #读sheet的第0行数据,从第1列开始,到第6列结束</span>

xlwt写入表格

#-*-coding:utf-8-*-
__author__ = 'LiGaofeng'

from xlwt import *

'''
单元格style定义
'''
g_normalStyle = XFStyle()
g_normalStyle.pattern.pattern = 1 #设置有填充北京颜色,默认没有,只有设置这个值pattern_fore_colour的设置才有效
g_normalStyle.pattern.pattern_fore_colour = 1 #设置单元格的背景填充色为白色,
'''
pattern.pattern_fore_colour = 5 # May be: 8 through 63. 0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue,
5 = Yellow, 6 = Magenta, 7 = Cyan, 16 = Maroon, 17 = Dark Green, 18 = Dark Blue, 19 = Dark Yellow , almost brown),
20 = Dark Magenta, 21 = Teal, 22 = Light Gray, 23 = Dark Gray, the list goes on...
'''
g_normalStyle.borders.left = 1 #左边框为细线
g_normalStyle.borders.right = 1 #右边框细线
g_normalStyle.borders.top = 1 #上边框细线
g_normalStyle.borders.bottom = 1 #下边框细线,默认的是没有边框的

g_headerFont = Font()
g_headerFont.bold = True #使用粗体
g_headerFont._weight = 15 #设置字体大小
g_headerStyle = XFStyle()
g_headerStyle.font = g_headerFont #设置字体
g_headerStyle.alignment.horz = 2 #居中
g_headerStyle.borders.left = 1
g_headerStyle.borders.right = 1
g_headerStyle.borders.top = 1
g_headerStyle.borders.bottom = 1


'''
sheet写入
'''
bk_invoice = Workbook() #创建工作簿
sht_invoice = bk_invoice.add_sheet('invoice') #通过名字在工作簿中添加工作表
sht_invoice.write(0, 1, 'hello world') #对第0行第1列的单元格写入'hello world',style采用默认的
sht_invoice.write(1, 1, 'hello world', g_normalStyle) #按照自定义的style

#感觉一个不好的地方是Worksheet类中没有自带的写入一行的函数,于是自己动手写了一个简单的
'''
对sheet写入行
将vals的内容写入到sht,从col开始
'''
def writeLine(sht, vals, row, col = 0, cellStyle = g_normalStyle):
    for i in range(len(vals)):
        sht.write(row, col + i, vals[i], cellStyle)

#有时候需要合并单元格式写入
sht_invoice.write_merge(1, 1, 0, 12, u'申请表', g_headerStyle)
#将工作表的第一行0列到第一行12列合并为一个单元格并且写入'申请表',采用g_headerStyle,不设置风格的话采用默认的风格
#写入汉字的时候最好指定为utf8编码不然的话容易出现编码问题</span>

 
 

Note

  1. 读入xls的日期时在python中会变成数字,这个数字就是日期,只是是日期到1899年12月31日的天数十件差,可以在代码中不管,生成xls文件时再通过excel表格中设置单元格的显示方式为日期来修改;
  2. 另外一种方式就是xlrd中有提供xlsdate和常用日期之间的转换接口供调用,xldate_as_tuple,xldate_from_tuple,xldate_from_datetime_tuple
  3. 涉及到的数字转换为人民币大写的形式可以参照https://www.freebsdchina.org/forum/viewtopic.php?t=63061&sid=79a011210fdcf0ca305b69cd82d9f391
  4. xlrd/xlwtk对xls格式的文件读写的支持还行,但是功能偏弱,并且对xlsx的支持好像不怎么给力,如果有需要功能更加强大的朋友可以转http://www.gocalf.com/blog/python-read-write-excel.html看看

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值