Python中xlrd和xlwt模块读写Excel的方法
本文主要介绍可操作excel文件的xlrd、xlwt模块。其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入。
着重掌握读取操作,因为实际工作中读取excel用得比较多,写操作几乎不怎么用。
python读excel—xlrd
测试使用excel文档名称为result.xls,内容如下:

1、 打开excel文件并获取所有sheet的名称,以及根据下标获取sheet名称
#打开excel文件
workbook = xlrd.open_workbook(r'C:\Users\Administrator.USER-20170604IN\Desktop\result.xls')
#获取excel中所有的sheet页
sheet_names = workbook.sheet_names()
print(sheet_names)
#获取第一个sheet的名称
print(sheet_names[0])
2、 根据sheet索引或者名称获取sheet内容,并获取sheet名称、行数、列数
#根据sheet索引或者名称获取sheet内容
sheet1 = workbook.sheet_by_index(0) #sheet索引从0开始
sheet1 = workbook.sheet_by_name('Sheet1') #打印sheet1的名称,行数,列数
print(sheet1.name, sheet1.nrows, sheet1.ncols)
3、根据sheet名称获取整行和整列的值
#获取整行和整列的值(数组)
rows = sheet1.row_values(3) #获取第四行的内容
cols = sheet1.col_values(2) #获取第三列的内容
print(rows)
print(cols)
4、获取指定单元格的内容
#获取单元格内容
print(sheet1.cell(1,0).value)
print(sheet1.cell_value(1,0))
print(sheet1.row(1)[0].value)
5、获取单元格内容的数据类型
#获取单元格内容的数据类型
print(sheet1.cell(7,4).ctype)
说明:ctype:0 empty,1 string,2 number,3 date,4 boolean,5 error
6、获取单元内容为日期类型的方式
使用xlrd的xldate_as_tuple处理date格式,先判断表格的ctype=3时xlrd才能执行操作,如下:
if (sheet.cell(row,col).ctype == 3):
date_value = xlrd.xldate_as_tuple(sheet.cell_value(1,2),workbook.datemode)
date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d')
7、获取合并单元格的内容
读取合并单元格时,只有合并单元格的第一个cell是有值的,其他cell都是空的。如果希望知道哪些是合并单元格,需要在读取文件的时候需要将formatting_info参数设置为True,默认是False。
workbook = xlrd.open_workbook(r'C:\Users\Administrator.USER-20170604IN\Desktop\result.xls', formatting_info = True)
sheet1 = workbook.sheet_by_name('Sheet1')
print(sheet1.merged_cells) merge = []
for rlow, rhigh, clow, chigh in sheet1.merged_cells:
merge.append([rlow, clow])
print(merge)
for index in merge:
print(sheet1.cell_value(index[0], index[1]))
运行结果如下:

merged_cell返回的四个参数的含义是:(row,row_range,col,col_range),其中[row,row_range)包括row,不包括row_range,col也是一样,即(1,3,4,5)的含义是:在第5列,第2行到第3行合并,(7,8,2,5)的含义是:在第8行,第3列到第5列合并。注意这些数字都是下标,换成实际excel行数列数时要加1。
python写excel——xlwt
下面的sheet1是即将要用xlwt实现的东西:

代码如下:
'''
设置单元格样式
''' def set_style(name,height,bold=False):
style = xlwt.XFStyle() # 初始化样式 font = xlwt.Font() # 为样式创建字体
font.name = name # 'Times New Roman'
font.bold = bold
font.color_index = 4
font.height = height # borders= xlwt.Borders()
# borders.left= 6
# borders.right= 6
# borders.top= 6
# borders.bottom= 6 style.font = font
# style.borders = borders return style #写excel
def write_excel():
f = xlwt.Workbook() #创建工作簿 '''
创建第一个sheet:
sheet1
'''
sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet
row0 = [u'业务',u'状态',u'北京',u'上海',u'广州',u'深圳',u'状态小计',u'合计']
column0 = [u'机票',u'船票',u'火车票',u'汽车票',u'其它']
status = [u'预订',u'出票',u'退票',u'业务小计'] #生成第一行
for i in range(0,len(row0)):
sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True)) #生成第一列和最后一列(合并4行)
i, j = 1, 0
while i < 4*len(column0) and j < len(column0):
sheet1.write_merge(i,i+3,0,0,column0[j],set_style('Arial',220,True)) #第一列
sheet1.write_merge(i,i+3,7,7) #最后一列"合计"
i += 4
j += 1 sheet1.write_merge(21,21,0,1,u'合计',set_style('Times New Roman',220,True)) #生成第二列
i = 0
while i < 4*len(column0):
for j in range(0,len(status)):
sheet1.write(j+i+1,1,status[j])
i += 4 f.save('demo1.xlsx') #保存文件 if __name__ == '__main__':
#generate_workbook()
#read_excel()
write_excel()
解释一下write_merge方法:
write_merge(x, x + m, y, w + n, string, sytle)
x表示行,y表示列,m表示跨行个数,n表示跨列个数,string表示要写入的单元格内容,style表示单元格样式。其中,x,y,w,h,都是以0开始计算的。
这个和xlrd中的读合并单元格的不太一样。
如上述:sheet1.write_merge(21,21,0,1,u'合计',set_style('Times New Roman',220,True))
即在22行合并第1,2列,合并后的单元格内容为"合计",并设置了style。
如果需要创建多个sheet,则只要f.add_sheet即可。
如在上述write_excel函数里f.save('demo1.xlsx') 这句之前再创建一个sheet2,效果如下:

代码如下:
'''
创建第二个sheet:
sheet2
'''
sheet2 = f.add_sheet(u'sheet2',cell_overwrite_ok=True) #创建sheet2
row0 = [u'姓名',u'年龄',u'出生日期',u'爱好',u'关系']
column0 = [u'小杰',u'小胖',u'小明',u'大神',u'大仙',u'小敏',u'无名'] #生成第一行
for i in range(0,len(row0)):
sheet2.write(0,i,row0[i],set_style('Times New Roman',220,True)) #生成第一列
for i in range(0,len(column0)):
sheet2.write(i+1,0,column0[i],set_style('Times New Roman',220)) sheet2.write(1,2,'1991/11/11')
sheet2.write_merge(7,7,2,4,u'暂无') #合并列单元格
sheet2.write_merge(1,2,4,4,u'好朋友') #合并行单元格 f.save('demo1.xlsx') #保存文件
参考资料:python中使用xlrd、xlwd操作excel表格详解
Python中xlrd和xlwt模块读写Excel的方法的更多相关文章
- python之xlrd和xlwt模块读写excel使用详解
一.xlrd模块和xlwt模块是什么 xlrd模块是python第三方工具包,用于读取excel中的数据: xlwt模块是python第三方工具包,用于往excel中写入数据: 二 ...
- Python中xlrd和xlwt模块使用方法 (python对excel文件的操作)
本文主要介绍可操作excel文件的xlrd.xlwt模块.其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 安装xlrd和xlwt模块 xlrd和xlwt模块不是 ...
- Python中xlrd和xlwt模块使用方法
本文主要介绍可操作excel文件的xlrd.xlwt模块.其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 安装xlrd和xlwt模块 xlrd和xlwt模块不是 ...
- Python中xlrd和xlwt模块使用方法----》》数据库数据导出(之一)
xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. (1) 打开excel文件并获取所有sheet >>> import xlrd >>& ...
- Python(xlrd、xlwt模块)操作Excel实例(一)
一.前言 关于Python的xlrd.xlwt模块的使用,推介另一位博客主的博文:https://www.cnblogs.com/zhoujie/p/python18.html 这篇里面有详细介绍这两 ...
- Python中xlrd、xlwt、win32com模块对xls文件的读写操作
# -*- coding: utf-8 -*- #xlrd和xlwt只支持xls文件读写,openpyxl只支持xlsx文件的读写操作 import xlrd import xlwt import w ...
- python的xlrd、xlwt模块、openpyxl /pymsql使用
xlrd模块: https://www.cnblogs.com/machangwei-8/p/10736528.html#_label0 xlwt模块 https://www.cnblogs.com/ ...
- python使用xlrd模块读写Excel文件的方法
本文实例讲述了python使用xlrd模块读写Excel文件的方法.分享给大家供大家参考.具体如下: 一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi ...
- python xlwt模块生成excel文件并写入数据 xlrd读取数据
python中一般使用 xlwt (excel write)来生成Excel文件(可以控制单元格格式),用 xlrd 来读取Excel文件,用xlrd读取excel是不能对其进行操作的. 1.xlrd ...
随机推荐
- 树莓派学习笔记(3):利用VNC远程控制树莓派
转载请注明:@小五义http://www.cnblogs.com/xiaowuyi 等了一个十一假期,新买的B+终于到了.按照前两节的方法,重新安装了操作系统. 一.添加国内软件源 Rasp ...
- 批量下载,多文件压缩打包zip下载
0.写在前面的话 图片批量下载,要求下载时集成为一个压缩包进行下载.从昨天下午折腾到现在,踩坑踩得莫名其妙,还是来唠唠,给自己留个印象的同时,也希望给需要用到这个方法的人带来一些帮助. 1.先叨叨IO ...
- ASP.NET Core 3.0 实战:构建多版本 API 接口
第一次在博客写分享,请多多捧场,如有歧义请多多包含! 因为业务需求发展需要,所以API接口的变更升级是必不可少的事情,而原有的接口是不可能马上停止使用的.例如:Login接口为例,1.0版本之返回用户 ...
- Python3入门(七)——模块
在Python中,一个.py文件就称之为一个模块(Module).(例如main.py就称之为main模块) 为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package). ...
- 文章翻译:Recommending items to more than a billion people(面向十亿级用户的推荐系统)
Web上数据的增长使得在完整的数据集上使用许多机器学习算法变得更加困难.特别是对于个性化推荐问题,数据采样通常不是一种选择,需要对分布式算法设计进行创新,以便我们能够扩展到这些不断增长的数据集. 协同 ...
- JS计算混合字符串长度
用的是正则表达式 var str = ”坦克是tank的音译”; var len = str.match(/[^ -~]/g) == null ? str.length : str.length + ...
- [CERC2017]Intrinsic Interval[scc+线段树优化建图]
题意 给定一个长度为 \(n\) 的排列,有 \(q\) 次询问,每次询问一个区间 \([l,r]\) ,找到最小的包含 \([l,r]\) 的区间,满足这个区间包含了一段连续的数字. \(n\leq ...
- 初级字典树查找在 Emoji、关键字检索上的运用 Part-1
系列索引 Unicode 与 Emoji 字典树 TrieTree 与性能测试 生产实践 前言 通常用户自行修改资料是很常见的需求,我们规定昵称长度在2到10之间.假设用户试图使用表情符号
- Postman安装与入门使用
Postman官方下载地址:https://www.getpostman.com/apps Postman 是一个很强大的 API调试.Http请求的工具.我们可以用来很方便的模拟get或者post或 ...
- Unity3d Transform.forward和Vector3.forward的区别!
在Unity中有两个forward,一个是Transform.forward一个是Vector3.forward. 对于Vector3来说,它只是缩写.没有其它任何含义. Vector3.forwar ...