xlrd和xlwt模块

一、简述

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 copy

path = 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 xlwt


def set_style(name, high, colour='white', bold=False, format_str='', align='center'):
    style = xlwt.XFStyle()   # 初始化样式
    font = xlwt.Font()  # 为样式创建字体
    font.name = name
    font.bold = bold
    font.height = high

    borders = xlwt.Borders()  #为样式创建边框
    borders.left = 2
    borders.right = 2
    borders.top = 0
    borders.bottom = 2

    pattern = 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 = font
    style.borders = borders
    style.num_format_str = format_str
    style.alignment = alignment
    style.pattern = pattern

    return style


wb = 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*30
    ws.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')

写入的表格内容:

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值