一、简述
xlrd和xlwt是python的第三方库,xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入
二、安装
使用前需先进行安装这2个库
pip install xlrd
pip install xlwt
初始表格信息:imformation.xls
sheet:学生信息
sheet:考试信息
三、xlrd使用
1、打开Excel文件读取数据
2、根据下标获取sheet名称
3、根据sheet索引或者名称获取sheet内容,获取sheet名称、列数、行数
4、根据sheet名称获取整行和整列的值
5、获取指定单元格的内容
6、获取单元格内容的数据类型
7、获取单元内容为日期类型的方式
8、获取单元内容为number的方式(转为整型)
import xlrd
from datetime import date# 打开excel表格读取数据
data = xlrd.open_workbook('C:/Users/mpp/Desktop/information.xls')
sheet = data.sheet_names() #获取全部sheet名称
print(sheet) # ['学生信息', '考试信息', 'Sheet3']# 根据下标获取表格
sheet1_name = data.sheet_names()[0]
print(sheet1_name) # 学生信息# 根据名称获取sheet内容,并获取sheet名称,行数,列数
sheet1_data = data.sheet_by_name('学生信息')
print(f'表格名称:{sheet1_data.name}\n行数:{sheet1_data.nrows}\n列数:{sheet1_data.ncols}')
# 表格名称:学生信息
# 行数:5
# 列数:3# 根据索引获取sheet内容,并获取sheet名称,行数,列数
sheet2_data = data.sheet_by_index(1)
print(f'表格名称:{sheet2_data.name}\n行数:{sheet2_data.nrows}\n列数:{sheet2_data.ncols}')
# 表格名称:考试信息
# 行数:4
# 列数:3# 根据sheet名称获取整行和整列的值
sheet1_data = data.sheet_by_name('学生信息')
print(sheet1_data.row_values(0)) # ['姓名', '年龄', '地址']# 获取指定单元格的内容
print(sheet1_data.cell_value(0, 0)) # 第一行第一列内容:姓名
print(sheet1_data.cell_value(1, 2)) # 第2行,第3列内容:上海
print(sheet1_data.row(3)[0].value) # 第4行第1列内容:rose
print(sheet1_data.col(2)[2].value) # 第3行第3列内容:北京# 获取单元格内容的数据类型:说明:ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
print(sheet1_data.cell(0, 0).ctype) # 获取sheet1 第1行第1列的数据类型 :1 -> string类型
print(sheet1_data.cell(1, 1).ctype) # 获取sheet1 第2行第2列的数据类型 :2 -> int类型
print(sheet2_data.cell(1, 0).ctype) # 获取sheet2 第2行第1列的数据类型 :3 -> date类型# 获取到日期转为date格式
print(sheet2_data.cell(1, 0).value) # 44713.40625
if sheet2_data.cell(1, 0).ctype == 3:date_value = xlrd.xldate_as_tuple(sheet2_data.cell(1, 0).value, 0)print(date_value)print(*date_value[:3])print(date(*date_value[:3]).strftime('%Y/%m/%d')) # 2022/06/01# 获取单元内容为number的方式(转为整型)
print(sheet2_data.cell(1, 2).value) # 46.0
if sheet2_data.cell(1, 2).ctype == 2:print(int(sheet2_data.cell(1, 2).value)) # 46
xlrd读取文件内容后,再写入数据,可以使用xlutils的copy方法,转储原xls格式用来进一步写入数据。如,实现“学生信息”表中,在第4列新增性别数据
import xlrd
from xlutils import copypath = r'C:/Users/mpp/Desktop/information.xls'
wb = xlrd.open_workbook(path)
wsheet = wb.sheet_by_name('学生信息')
wsheet_rows = sheet_data.nrows
new_wb = copy(wb) # 复制文件并保留格式
new_wsheet = new_wb.get_sheet(0) # 根据下标打开表单data = ['性别', '男', '男', '女', '女']# 在第4列写入性别数据
for i in range(len(data)):wsheet.write(i, 3 , data[i]) new_wb.save(path) # 最后进行保存
四、xlwt使用
import xlwtdef set_style(name, high, colour='white', bold=False, format_str='', align='center'):style = xlwt.XFStyle() # 初始化样式font = xlwt.Font() # 为样式创建字体font.name = namefont.bold = boldfont.height = highborders = xlwt.Borders() #为样式创建边框borders.left = 2borders.right = 2borders.top = 0borders.bottom = 2pattern = xlwt.Pattern() # 一个实例化的样式类pattern.pattern = xlwt.Pattern.SOLID_PATTERN # 固定的样式pattern.pattern_fore_colour = xlwt.Style.colour_map[colour] # 设置背景颜色alignment = xlwt.Alignment() # 设置对齐方式if align == 'center':alignment.horz = alignment.HORZ_CENTER # 设置水平居中方式alignment.vert = alignment.VERT_CENTER # 设置垂直居中方式else:alignment.horz = alignment.HORZ_LEFT #设置左对齐方式alignment.vert = alignment.VERT_BOTTOM #设置底部对齐方式style.font = fontstyle.borders = bordersstyle.num_format_str = format_strstyle.alignment = alignmentstyle.pattern = patternreturn stylewb = xlwt.Workbook()
ws = wb.add_sheet('员工信息统计表', cell_overwrite_ok=True) # 创建sheet表
rows = ['公司', '姓名', '工号', '手机号', '邮箱']
col1 = ['张三', '李四', '王五']
col2 = ['3212001', '3212002', '3212003']
col3 = ['13212345601', '13212345602', '13212345603']
col4 = ['111@qq.com', '222@qq.com', '333@qq.com']# 写入第一行数据, 合并第1行, 第1~6列的单元格
ws.write_merge(0, 0, 0, 4, '员工信息表', set_style('等线', 300, colour='yellow', bold=True))# 写入第2行数据
for index, val in enumerate(rows):ws.col(index).width = 150*30ws.write(1, index, val, set_style('等线', 300, bold=True))# 写入第3~6行第一列数据,合并单元格
ws.write_merge(2, 2+len(col1)-1, 0, 0, 'XX科技公司', set_style('Times New Roman', 230))# 写入第3~6行,第2-6列的数据
data_list = (col1, col2, col3, col4)
for i in range(1, len(rows)):items = data_list[i-1]for index, val in enumerate(items):ws.write(index + 2, i, val, set_style('Times New Roman', 230))wb.save('write.xls')
写入的表格内容: