使用Python xlrd与xlwt模块读写Excel
来源:互联网 发布:英伟达experience优化 编辑:程序博客网 时间:2024/05/22 02:54
最近处理一些Excel表格,遇到从大量表格的同一位置提取数值的情况,手动复制效率极低,还容易出现遗漏的情况,所以试着用Python中xlrd与xlwt模块实现了一下,接下来就简单分享一下用xlrd,xlwt来实现Excel读写操作的方法。
Ecxel的读取(xlrd)
首先通过pip安装xlrd:
>> pip install xlrd
或手动安装(https://pypi.python.org/pypi/xlrd)
xlrd的基本操作
#导入模块import xlrd#打开一个工作簿data = xlrd.open_workbook('D:/demo.xlsx')
获取sheet相关的操作
#获取sheettable_list = data.sheets() #获取sheet对象的列表table_name = data.sheet_names() #获取sheet name的列表table = data.sheets()[i] #按索引获取sheet对象table = data.sheet_by_index(i) #通过检索获取第i个sheet对象,作用和data.sheets()[i]相同table = data.sheet_by_name('sheet2') #通过name获取名称为“sheet2”的对象#返回sheet的名称、最大行数、最大列数name = table.name()nrows = table.nrows()ncols = table.ncols()
获取表格中值的相关操作
#获取整行、整列数据(返回为列表)rows = table.row_values(i) #返回第i行值的列表cols = table.col_values(j) #返回第j列值的列表#获取单元格(i,j)的值(i,j均从0开始计数)table.cell(i,j).valuetable.cell_value(i,j)table.row(i)[j].valuetable.col(j)[i].value#获取单元格中值的属性table.cell(i,j).ctype#返回值如下ctype:0 empty, 1 string, 2 number, 3 date, 4 boolean, 5 error#日期读取方法datetuple = xlrd.xldate_as_tuple(table.cell(i,j).value,0) #转化为元组datetuple = xlrd.xldate_as_tuple(table.cell(i,j).value,1) #转化为datetime对象
一个小栗子:
下面来试着读取这份表中的数据
图1. 成绩单
import xlrddata = xlrd.open_workbook('D:/demo.xlsx') #打开一个工作簿table = data.sheets()[0] #打开第一个sheetprint('Name of sheet:',table.name) #输出sheet的名称print('The number of rows:',table.nrows) #输出行数for i in range(table.ncols-1): #按顺序打印第一列数据 print(table.cell(i,0).value)
运行结果:
Name of sheet: 成绩单
The number of rows: 5
姓名小明
小红
李华
结果显示所有需要的值都可以读取出来,但仔细观察会发现“姓名”和“小明”之间有一个空值,我们打印A2的对象
print(table.cell(1,0))
结果为:
empty:”
这是因为表中第一列前两个单元格是合并的,而xlrd读取合并单元格时只会读入其中第一个值,其他当做空值读入,读表时需要注意。
Ecxel的写入(xlwt)
安装xlwt package
>> pip install xlwt
或者(https://pypi.python.org/pypi/xlwt/)
xlwt的基本操作
#导入xlwt模块import xlwt#创建一个工作簿f = xlwt.Workbook()#创建一个sheet,cell_overwrite_ok默认为False,当设置为True时,覆盖已有数据不会报错sheet1 = f.add_sheet('A Demo',cell_overwrite_ok=False)
数据写入
#写入单元格sheet1.write(r,c,label = '',style = style0)
其中r,c分别为行、列号,均从0开始计数;label = 后面为值选项,可以输入整型、浮点型数值变量,字符串,bool值,时间戳等值或变量;style = 为可选项,用于设置单元格字体、对齐、背景及边框等附加属性,后面会详细介绍(“label = ”和“style = ”可同时省略,即输入:sheet1.write(r,c,value,style0))。
#按公式写入单元格sheet1.write(i,j,xlwt.Formula('A1+A2') #将A1与A2相加后写入(i,j)sheet1.write(i,j,xlwt.Formula('SUM(A1,A2,A3)')) #A1,A2,A3求和后写入(i,j)sheet1.write(i,j,Formula('HYPERLINK("http://www.google.com";"Google")')) #插入超链接#合并单元格write_merge(r,r+l,c,c+h,label = '',style = style) #r,c为起始行列,l,h为跨行列数
写入完成后保存文件,需要注意xlwt只支持Excel2007之前的版本,即保存时应以.xls为后缀,如果存为.xlsx文件打开时会出错。
#保存文件,以.xls为后缀f.save('D:/demo.xls')
xlwt的格式控制
在写入单元格时,有style的可选项,用于控制单元格格式,其中包括六组选项:
下面只详细介绍字体、对齐、边框及背景设置
字体格式:
#创建字体格式font0font0 = xlwt.Font()font0.name = 'Times New Roman' #选择字体font0.colour_index = 2 #字体颜色,序号对应颜色如下所示font0.hight = 200 #字体大小font0.bold = True #字体加粗font0.underline = xlwt.Font.UNDERLINE_NONE #下划线 May be: UNDERLINE_SINGLE, UNDERLINE_SINGLE_ACC(单元格扩展), UNDERLINE_DOUBLE(双下划线), UNDERLINE_DOUBLE_ACCfont0.italic = True #斜体font0.struck_out = True #删除线font0.escapement = xlwt.Font.ESCAPEMENT_NONE #将内容设为上下标 May Be:ESCAPEMENT_SUPERSCRIPT,ESCAPEMENT_SUBSCRIPT
其中字体颜色序号对应为:
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…
单元格对齐:
#创建格式alignment0alignment0 = xlwt.Alignment()#水平对齐设置alignment0.horz = xlwt.Alignment.HORZ_CENTER #May be:HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED#垂直对齐设置alignment0.vert = xlwt.Alignment.VERT_CENTER #May be:VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED
边框格式:
#创建格式borders0borders0 = xlwt.Borders()#设置单元格左侧边框线条及颜色,同理可设置上部top,底部bottom及右侧right的边框属性borders0.left = xlwt.Borders.DASHED #边框类型 May be: NO_LINE, THIN, MEDIUM, DASHED, DOTTED, THICK, DOUBLE, HAIR, MEDIUM_DASHED, THIN_DASH_DOTTED, MEDIUM_DASH_DOTTED, THIN_DASH_DOT_DOTTED, MEDIUM_DASH_DOT_DOTTED, SLANTED_MEDIUM_DASH_DOTTED, or 0x00 through 0x0D.borders0.left_colour = 0x40 #边框颜色(0x00 : 0x40)
背景格式:
#创建格式pattern0pattern0 = xlwt.Pattern()#设置背景阴影pattern0.pattern = xlwt.Pattern.SOLID_PATTERN #May be: NO_PATTERN, SOLID_PATTERN, or 0x00 through 0x12 #设置背景色,序号对应同字体颜色. pattern0.pattern_fore_colour = 5
应用:
#创建格式style0style0 = xlwt.XFStyle()#分别将以上设置的属性赋值style0.font = font0style0.slignment = alignment0style0.borders = borders0style0.pattern = pattern0#写入表格时应用sheet1.write(0,0,label = 'abc',style = style0)
又一个小栗子:
使用xlwt写出图1所示的成绩单,代码如下:
import xlwtdef AlignmentStyle(horz_type,vert_type): alignment = xlwt.Alignment() alignment.horz = horz_type alignment.vert = vert_type return alignmentdef BordersStyle(line_type,line_colour): borders = xlwt.Borders() borders.top = line_type borders.top_colour = line_colour borders.left = line_type borders.left_colour = line_colour borders.bottom = line_type borders.bottom_colour = line_colour borders.right = line_type borders.right_colour = line_colour return borders# 生成工作簿及sheetf = xlwt.Workbook()sheet1 = f.add_sheet('成绩单',cell_overwrite_ok = True)# 设置单元格格式,其中字体及背景为默认style0 = xlwt.XFStyle()style0.alignment = AlignmentStyle(xlwt.Alignment.HORZ_CENTER,xlwt.Alignment.VERT_CENTER)style0.borders = BordersStyle(xlwt.Borders.THIN,0x00)# 信息列表subject_list = ['语文','思想品德','数学','科学']info_list = [['小明',22,80,85,90,77],['小红',23,91,88,95,90],['李华',24,75,70,98,100]]# 创建表头sheet1.write_merge(0,1,0,0,label = '姓名',style = style0)sheet1.write_merge(0,1,1,1,label = '学号',style = style0)sheet1.write_merge(0,0,2,3,label = '文科',style = style0)sheet1.write_merge(0,0,4,5,label = '理科',style = style0)# 写入学科(写入语句将"label ="及"style ="省略)for i in range(4): sheet1.write(1,i+2,subject_list[i],style0)# 写入信息for obs in range(3): for info in range(6): sheet1.write(obs+2,info,info_list[obs][info],style0)#保存文件为.xlsf.save("C:/users/Vincent Wu/Desktop/score.xls")
生成结果为:
图2.成绩单2
综上,利用xlrd和xlwt可以很方便地对Excel进行读写操作,但由于xlwt只支持写入.xls格式文件,因此单个sheet最大行数限制为65535,当写入文件超过这一值时,会遇到如下报错:
ValueError: row index was 65536, not allowed by .xls format
此时该模块将不再适用,可以利用openpyxl代替之,后面再介绍openpyxl的用法及例子。
初次写博文,如有纰漏,还望指正!(●′ω`●)
- 使用Python xlrd与xlwt模块读写Excel
- Python操作Excel读写--xlrd、xlwt模块
- Python读写Excel:xlrd与xlwt
- python操作Excel读写--使用xlrd/xlwt
- Python.xlrd&xlwt -- Excel读写
- Python xlrd xlwt读写Excel
- Python中excel读写模块简介---xlrd、xlwt模块
- python excel 的相关操作(使用 xlrd xlwt 读写)
- python中使用xlrd、xlwt读写excel(xls格式)
- 使用python读写操作同一个excel(xlrd,xlwt,xlutils)
- 使用python的xlrd和xlwt模块合并excel表格
- python使用xlwt和xlrd模块操作excel
- 用python读写excel(xlrd、xlwt)
- Python简单读写Excel (xlwt, xlrd, xlutils)
- 用python读写excel(xlrd、xlwt)
- Python读写Excel文件,xlrd ,xlwt ,xlutils
- Python xlrd和xlwt读写Excel
- python->xlwt,xlrd,模块的使用
- 32 Three.js的材质的种类和共有属性
- [LockFree之美] 共享变量的并发读写
- Android Init进程
- [LockFree之美] 使用Hazard Version实现的无锁Stack与Queue
- oracle11g利用分区表进行查询性能的优化
- 使用Python xlrd与xlwt模块读写Excel
- 数据结构编程笔记十九:第七章 图 图的邻接表存储表示及各基本操作的实现
- 【MYSQL】基础SQL语句总结(一)
- [LeetCode Solution 54] Spiral Matrix
- oracle索引优化
- 北大半年巨变:由被动变主动
- Python 使用递归函数实现汉诺塔
- 浅谈"指向二维数组的指针"
- computer applications