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

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')

 

写入的表格内容:

 

posted @ 2022-08-02 21:37  yomia  阅读(138)  评论(0编辑  收藏  举报