模块介绍
(1)什么是xlrd模块?
(2)为什么使用xlrd模块?
在UI自动化或者接口自动化中数据维护是一个核心,所以此模块非常实用。
xlrd模块可以用于读取Excel的数据,速度非常快,推荐使用!
官方文档:https://xlrd.readthedocs.io/en/latest/
重要的事情说三遍:仅支持.xls格式、仅支持.xls格式、仅支持.xls格式
xlrd单元格数据类型表示:
- 0:empty
- 1:string
- 2:number
- 3:date
- 4:boolean
- 5:error
准备工作
准备一张示例表格:D:\code\python\06.excel操作\pokes-001.xls
内容如下。
python">import xlwt, xlrd
data = xlrd.open_workbook(r"D:\code\python\06.excel操作\pokes-001.xls")
print("打开文件", data)
一、读取文件
python">print("通过索引顺序获取第一个工作表", data.sheets()[0])
print("获取全部sheet", data.sheets())
print("返回book中所有工作表的名字", data.sheet_names())
print(data.sheets()[0]) # 激活工作表对象
print(data.sheet_by_index(0)) # 根据索引获取工作表,0表示第一个,以此类推
print(data.sheet_by_name('Sheet1')) # 根据名字sheetname(区分大小写)获取工作表
查看共有多少个工作表
python">print(len(data.sheet_names())) # 返回所有工作表的名称组成的list的长度 3
print(data.nsheets) # 返回excel工作表的数量 3
print("*" * 50)
行操作
python">sheet1 = data.sheet_by_index(0) # 选择读取第一个工作表
print(sheet1.nrows) # 有效行数
print(sheet1.row(0)) # 输出第一行数据,[text:'ID', text:'姓名', text:'性别', text:'年龄']
print(sheet1.row(1)) # 输出第2行数据,返回该行单元格对象组成的列表
print(sheet1.row_types(1)) # 获取单元格的数据类型,返回指定行数据的数据类型
print(sheet1.row(1)[3]) # 获取单元格的数据类型,number:12.0
print(sheet1.row(1)[2].value) # 获取单元格value,男
print(sheet1.row_values(1)) # 得到指定行单元格的值,['001', '张三001', '男', 12.0]
print(sheet1.row_len(1)) # 得到单元格的长度
print("*" * 50)
excel_74">操作excel列
python">sheet1 = data.sheet_by_index(0) # 选择读取第一个工作表
print(sheet1.ncols) # 有效列数
print(sheet1.col(1)) # 该列单元格对象组成的列表
print(sheet1.col(1)[2]) # 定位单元格获取值,1表示第二列,2表示第三行,查看字符类型
print(sheet1.col(1)[2].value) # 定位单元格获取值,1表示第二列,2表示第三行,获取值
print(sheet1.col_values(1)) # 返回该列所有单元格的value组成的列表,其实就是将第二列的值组成一个列表
print(sheet1.col_types(1)) # 获取该列单元格的数据类型 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
print("*" * 50)
单元格操作
python">sheet1 = data.sheet_by_index(0) # 激活第一个工作表
print(sheet1.cell(1, 2)) # 1是行,2是列,输出:text:'男' ,text是文本
获取单元格数据类型
python">print(sheet1.cell_type(1, 2)) # 1
print(sheet1.cell(1, 2).ctype) # 1
获取单元格的值
python">print(sheet1.cell(1, 2).value) # 获取第二行,第三列单元格的值 男
print(sheet1.cell_value(1, 2)) # 男
print("*" * 150)
二、写入文件
python">import xlwt
# 创建一个workbook对象,就相当于创建了一个Excel文件
workbook = xlwt.Workbook(encoding='utf-8',style_compression=0) # encoding:设置编码,可写中文;style_compression:是否压缩,不常用
# 创建一个sheet对象,相当于创建一个sheet页
worksheet = workbook.add_sheet('这是sheet1',cell_overwrite_ok=True) # cell_overwrite_ok:是否可以覆盖单元格,默认为False
# 向sheet页中添加数据:worksheet.write(行,列,值)
worksheet.write(0,0,'我要发财啦') # 第1行第1列写入数据
# 将以上内容保存到指定的文件中
workbook.save('测试文件.xls')
运行结果如下图:
python">import xlwt
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('这是sheet1')
style = xlwt.XFStyle() # 初始化样式
font = xlwt.Font() # 为样式创建字体(font)
# 指定字体的具体属性(仅列出常用属性)
font.name = '宋' # 指定字体
font.height = 300 # 和excel字体大小比例是1:20
font.bold = True # 字体是否加粗
font.underline = True # 字体是否下划线
font.struck_out = True # 字体是否有横线
font.italic = True # 是否斜体字
font.colour_index = 4 # 字体颜色
# 设定字体样式
style.font = font
# 向sheet页中添加数据
worksheet.write(0, 0, '无样式文本')
worksheet.write(0, 1, '有样式文本', style)
workbook.save('测试文件.xls')
运行结果如下图:
字体大小
和excel字体大小比例是1:20,假设需要15号字体大小,则需要设置成300
字体颜色对照图
背景颜色设置(pattern)
python">import xlwt
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook .add_sheet('这是sheet1')
worksheet.write(0,0,'无样式文本')
# 初始化样式
style = xlwt.XFStyle()
# 1. 为样式创建字体(font)
font = xlwt.Font()
# 指定字体的具体属性(仅列出常用属性)
font.name = '宋' # 指定字体
font.height = 300 # 和excel字体大小比例是1:20
font.bold = True # 字体是否加粗
font.underline = True # 字体是否下划线
font.struck_out = True # 字体是否有横线
font.italic = True # 是否斜体字
font.colour_index = 4 # 字体颜色
# 设置style的各个属性的样式
style.font = font # 设定字体样式
worksheet.write(2,0,'有样式文本(字体样式)',style)
# 2. 为样式创建背景图案(pattern)
pattern = xlwt.Pattern()
# 指定背景颜色
pattern.pattern = xlwt.Pattern.SOLID_PATTERN # 设置背景颜色模式
pattern.pattern_fore_colour = 3 # 不同的值代表不同颜色背景
# 设置style的各个属性的样式
style.pattern = pattern # 设定背景图案样式
worksheet.write(4,0,'有样式文本(字体样式+背景图案样式)',style)
workbook .save('测试文件.xls')
边框设置(borders)
python">import xlwt
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook .add_sheet('这是sheet1')
# 初始化样式
style = xlwt.XFStyle()
borders = xlwt.Borders()
# 设定边框属性
borders.left = xlwt.Borders.THIN
borders.right = xlwt.Borders.THIN
borders.top = xlwt.Borders.THIN
borders.bottom = xlwt.Borders.THIN
# 设定边框样式
style.borders = borders
# 写入数据
worksheet.write(0,0,'无样式文本')
worksheet.write(2,0,'有样式文本(边框样式)',style)
# 保存.xls
workbook.save('测试文件.xls')
对齐方式设置(alignment)
python">import xlwt
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook .add_sheet('这是sheet1')
# 初始化样式
style = xlwt.XFStyle()
# 对齐方式的设置(alignment)
alignment = xlwt.Alignment()
# 设置具体的对齐方式 : vert代表垂直对齐方式;horz代表水平对齐方式
alignment.vert = 0x01 # 0x00 上端对齐;0x01 居中对齐(垂直方向上);0x02 底端对齐
alignment.horz = 0x03 # 0x01 左端对齐;0x02 居中对齐(水平方向上);0x03 右端对齐
# 自动换行
alignment.wrap = 1 # 自动换行
# 设定设定对齐方式
style.alignment = alignment
# 写入数据
worksheet.write(0,0,'无样式文本')
worksheet.write(2,0,'有样式文本(设定对齐方式)',style)
# 保存.xls
workbook.save('测试文件.xls')
单元格格式(num_format_str)
python">import xlwt
from datetime import datetime
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook .add_sheet('这是sheet1')
date_str = '2022-04-12'
style = xlwt.XFStyle()
num_format_str = 'yyyy/MM/dd'
style.num_format_str = num_format_str
# 写入数据
worksheet.write(0,0,date_str)
worksheet.write(2,0,datetime.strptime(date_str,'%Y-%m-%d').date(),style)
# 保存.xls
workbook.save('测试文件.xls')
列宽和行高
python">import xlwt
from datetime import datetime
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook .add_sheet('这是sheet1')
# 写入数据
worksheet.write(0,0,'我是个很长的字符')
worksheet.write(0,4,'我也是个很长的字符哦')
worksheet.col(4).width=256*20 # 设计第4列宽度
# 保存.xls
workbook.save('测试文件.xls')
多行列合并写入
python">import xlwt
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook .add_sheet('这是sheet1')
# 写入数据
worksheet.write(0,0,'无合并')
worksheet.write_merge(0, 3, 4, 7, '有合并')#1-4行,5-8列合并单元格
# 保存.xls
workbook.save('测试文件.xls')