Day8 xlrd和xlwt操作Excel文件

Day8

重点:

1.xlrd获取文件内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vTuSklnk-1676509921203)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20230215114028659.png)]

1.打开Excel文件
import xlrd		#导入xlrd
wb = xlrd.open_workbook('files/data1.xls')
2.获取所有工作表的表名

工作簿.sheet_names()

names = wb.sheet_names()
print(names)  # ['students', 'teacher']
3.获取工作表

1)获取所有的工作表: 工作簿.sheets()

all_sheet = wb.sheets()
print(all_sheet)  # [Sheet  0:<students>, Sheet  1:<teacher>]

​ *2)获取一个工作表:

工作簿.sheet_by_name(表名)

工作簿.sheet_by_index(下标)

stu_sheet = wb.sheet_by_name('students')
print(stu_sheet)  # Sheet  0:<students>
tea_sheet = wb.sheet_by_index(1)
print(tea_sheet)  # Sheet  1:<teacher>
4.获取最大行数和最大列数

工作表.nrows

工作表.ncols

m_r = stu_sheet.nrows
m_c = stu_sheet.ncols
print(m_r, m_c)  # 5 4
5.按行或者按列获取数据
1)按行获取数据

工作表.row_values(行下标) - 获取指定行的所有数据(行下标是从0开始的)

工作表.row_values(行下标,起始列下标) - 获取指定行中列开始的所有数据

工作表.row_values(行下标,起始列下标,终止列下标) - 获取指定行中指定范围的所有数据(终止列下标的数据取不到)

result = stu_sheet.row_values(3)
print(result)  # ['小花', '女', 22.0, 95.0]

result1 = stu_sheet.row_values(2, 1, 3)  # ['男', 25.0, 87.0]
print(result1)
2)按列获取数据

工作表.col_values(列下标)

工作表.col_values(列下标,起始行下标)

工作表.col_values(列下标,起始行下标,终止行下标)

result2 = stu_sheet.col_values(0)
print(result2)
result3 = stu_sheet.col_values(3, 1)
print(result3)
6.获取单元格

1)工作表.cell(行下标,列下标) - 获取指定位置对应的单元格对象

2)单元格.value - 获取单元格中的数据

print(stu_sheet.cell(1, 0))
print(stu_sheet.cell(1, 2).value)

3)工作表.row(行下标) - 获取指定行中所有的单元格

result = stu_sheet.row(0)  # [text:'姓名', text:'性别', text:'年龄', text:'分数']
result = stu_sheet.row(0)[2]# text:'年龄'
print(result)

4)工作表.col(列下标) - 获取指定列中所有的单元格

result = stu_sheet.col(0)
print(result)

总的

import xlrd		#导入xlrd
# 1.打开Excel文件
wb = xlrd.open_workbook('files/data1.xls')
# 2.获取所有工作表的表名
# 工作簿.sheet_names()
names = wb.sheet_names()
print(names)  # ['students', 'teacher']
# 3.获取工作表
# 1)获取所有的工作表: 工作簿.sheets()
all_sheet = wb.sheets()
print(all_sheet)  # [Sheet  0:<students>, Sheet  1:<teacher>]

# 2)获取一个工作表:
# 工作簿.sheet_by_name(表名)
# 工作簿.sheet_by_index(下标)
stu_sheet = wb.sheet_by_name('students')
print(stu_sheet)  # Sheet  0:<students>
tea_sheet = wb.sheet_by_index(1)
print(tea_sheet)  # Sheet  1:<teacher>

# 4.获取最大行数和最大列数
# 工作表.nrows
# 工作表.ncols
m_r = stu_sheet.nrows
m_c = stu_sheet.ncols
print(m_r, m_c)  # 5 4

# 5.按行或者按列获取数据
# 1)按行获取数据
# 工作表.row_values(行下标)    -   获取指定行的所有数据(行下标是从0开始的)
# 工作表.row_values(行下标,起始列下标)  -   获取指定行中列开始的所有数据
# 工作表.row_values(行下标,起始列下标,终止列下标)    -   获取指定行中指定范围的所有数据(终止列下标的数据取不到)
result = stu_sheet.row_values(3)
print(result)  # ['小花', '女', 22.0, 95.0]

result1 = stu_sheet.row_values(2, 1, 3)  # ['男', 25.0, 87.0]
print(result1)

# 2)按列获取数据
# 工作表.col_values(列下标)
# 工作表.col_values(列下标,起始行下标)
# 工作表.col_values(列下标,起始行下标,终止行下标)
result2 = stu_sheet.col_values(0)
print(result2)
result3 = stu_sheet.col_values(3, 1)
print(result3)

# 练习1:一行一行的获取整个学生表中所有的数据
# 练习2:一列一列的获取所有学生的信息
for col in range(stu_sheet.nrows):
    result = stu_sheet.row_values(col)
    print(result)
for row in range(stu_sheet.ncols):
    result = stu_sheet.col_values(row, 1)
    print(result)

# 6.获取单元格
# 1)工作表.cell(行下标,列下标)       -       获取指定位置对应的单元格对象
# 2)单元格.value    -   获取单元格中的数据
print(stu_sheet.cell(1, 0))
print(stu_sheet.cell(1, 2).value)
# 3)工作表.row(行下标)        -       获取指定行中所有的单元格
result = stu_sheet.row(0)  # [text:'姓名', text:'性别', text:'年龄', text:'分数']
# result = stu_sheet.row(0)[2]#text:'年龄'
print(result)
# 4)工作表.col(列下标)         -       获取指定列中所有的单元格
result = stu_sheet.col(0)
print(result)

2.xlwt对文件进行写操作

1.创建Excel文件(创建工作簿)

注意:创建工作簿的时候不会自动创建工作表

wb = xlwt.Workbook()
2.添加工作表

1)工作簿.add_sheet(表名) - 在工作簿中添加指定名字对应的工作表,这个表中的单元格不能重写
2)工作簿.add_sheet(表名,cell_overwrite_ok=True) - 在工作簿中添加指定名字对应的工作表,这个表中的单元格可以重写

sheet1 = wb.add_sheet('数据1')
sheet2 = wb.add_sheet('数据2', cell_overwrite_ok=True)
3.写入数据

工作表.write(行下标,列下标,数据) - 将数据写入到指定工作表中指定位置

sheet1.write(0, 0, '名字')
sheet1.write(1, 2, 'hello')
sheet1.write(0,0,'name')   #会报错 创建表时,只能写一次数据,Attempt to overwrite cell: sheetname='数据1' rowx=0 colx=0

sheet2.write(0, 0, '名字')
sheet2.write(1, 2, 'hello')
sheet2.write(0, 0, 'name')
sheet2.write(1, 2, None)
wb.save('files/examples1.xls')

总的

import xlwt
# 1.创建Excel文件(创建工作簿)
# 注意:创建工作簿的时候不会自动创建工作表
wb = xlwt.Workbook()
# 2.添加工作表
# 1)工作簿.add_sheet(表名)   -   在工作簿中添加指定名字对应的工作表,这个表中的单元格不能重写
# 2)工作簿.add_sheet(表名,cell_overwrite_ok=True)   -   在工作簿中添加指定名字对应的工作表,这个表中的单元格可以重写
sheet1 = wb.add_sheet('数据1')
sheet2 = wb.add_sheet('数据2', cell_overwrite_ok=True)
# 3.写入数据
# 工作表.write(行下标,列下标,数据) -   将数据写入到指定工作表中指定位置
sheet1.write(0, 0, '名字')
sheet1.write(1, 2, 'hello')
# sheet1.write(0,0,'name')   #会报错 创建表时,只能写一次数据,Attempt to overwrite cell: sheetname='数据1' rowx=0 colx=0

sheet2.write(0, 0, '名字')
sheet2.write(1, 2, 'hello')
sheet2.write(0, 0, 'name')
sheet2.write(1, 2, None)
wb.save('files/examples1.xls')

3.xlwt修改单元格的样式

1.创建样式对象
style1 = xlwt.XFStyle()
2.添加字体样式
font1 = xlwt.Font()
font1.name = '黑体'
font1.bold = True
font1.colour_index = 12
font1.height = 25 * 25
style1.font = font1

# print(xlwt.Style.colour_map)输出颜色所对应的数值
3.添加边框样式
b1 = xlwt.Borders()
b1.bottom = b1.top = b1.left = b1.right = 10
b1.bottom_colour = 16
style1.borders = b1
4.添加对齐样式
style2 = xlwt.XFStyle()
al1 = xlwt.Alignment()
al1.vert = xlwt.Alignment.VERT_CENTER  # 水平对齐
al1.horz = xlwt.Alignment.HORZ_CENTER  # 垂直对齐
al1.rota = 15  # 旋转方向,值为数字
al1.wrap = 1  # 自动换行
al1.shri = 1  # 自动缩进
style2.alignment = al1

5.添加填充样式
style1 = xlwt.XFStyle()
p1 = xlwt.Pattern()
p1.pattern = xlwt.Pattern.SOLID_PATTERN
p1.pattern_fore_colour = 13
style1.pattern = p1
6.合并单元格

语法:工作表对象…write_merge(行下标1, 行下标2, 列下标1,列下标2, 写⼊内容, 样式) - r1,r2合并的起始⾏和终⽌⾏,c1,c2合并的起始列和终⽌列

sheet.write_merge(8, 8, 2, 6, 'hello', style1)
sheet.write(0, 0, '名字', style=style1)
#sheet.write(0, 1, '姓名符合国家快乐就好看了就后即可老两口就解决集合管控就好了科技回家考虑', style=style2)
sheet.write_merge(12, 22, 2, 7, 'hello', style2)
7.设置列的宽度和行的高度

1)设置列的宽度

sheet.col(0).width = 30 * 256  # 256是一个单位

2)设置行的高度

sheet.row(0).height_mismatch = True  # 先允许指定的行设置高度
sheet.row(0).height = 100 * 60
wb.save('files/examples2.xls')

总的

import xlwt

wb = xlwt.Workbook()
sheet = wb.add_sheet('样式')

# ==========设置单元格的样式==========
# 1.创建样式对象
style1 = xlwt.XFStyle()
# 2.添加字体样式
font1 = xlwt.Font()
font1.name = '黑体'
font1.bold = True
font1.colour_index = 12
font1.height = 25 * 25
style1.font = font1
# print(xlwt.Style.colour_map)输出颜色所对应的数值

# 3.添加边框样式
b1 = xlwt.Borders()
b1.bottom = b1.top = b1.left = b1.right = 10
b1.bottom_colour = 16
style1.borders = b1

# 4.添加对齐样式
style2 = xlwt.XFStyle()
al1 = xlwt.Alignment()
al1.vert = xlwt.Alignment.VERT_CENTER  # 水平对齐
al1.horz = xlwt.Alignment.HORZ_CENTER  # 垂直对齐
al1.rota = 15  # 旋转方向,值为数字
al1.wrap = 1  # 自动换行
al1.shri = 1  # 自动缩进
style2.alignment = al1

# 5.添加填充样式
style1 = xlwt.XFStyle()
p1 = xlwt.Pattern()
p1.pattern = xlwt.Pattern.SOLID_PATTERN
p1.pattern_fore_colour = 13
style1.pattern = p1

# 6.合并单元格
# 语法:工作表对象..write_merge(行下标1, 行下标2, 列下标1,列下标2, 写⼊内容, 样式) - r1,r2合并的起始⾏和终⽌⾏,c1,c2合并的起始列和终⽌列
sheet.write_merge(8, 8, 2, 6, 'hello', style1)
sheet.write(0, 0, '名字', style=style1)
# sheet.write(0, 1, '姓名符合国家快乐就好看了就后即可老两口就解决集合管控就好了科技回家考虑', style=style2)
sheet.write_merge(12, 22, 2, 7, 'hello', style2)

# 7.设置列的宽度和行的高度
# 1)设置列的宽度
sheet.col(0).width = 30 * 256  # 256是一个单位
# 2)设置行的高度
sheet.row(0).height_mismatch = True  # 先允许指定的行设置高度
sheet.row(0).height = 100 * 60
wb.save('files/examples2.xls')

4.利用xlutils修改已经存在的Excel文件

xlrd只能对Excel文件进行读操作,而且只能用通过xlrd打开的Excel文件(xlrd无法直接操作

xlwt创建的工作簿)

xlwt只能创建新的Excel,无法获取已经存在的Excel文件

结论:xlutils只能让已经存在的Excel可以添加新的表的写操作,不能直接修改表中的数据。

1.使用xlrd打开已经存在的工作簿对象(得到一个只读的工作簿)
wb = xlrd.open_workbook('files/data1.xls', formatting_info=True)
2.将只读的工作簿转换成可写的工作簿(在原表的基础上,新建子表,再写数据进新表)
wb1 = copy(wb)
s1 = wb1.add_sheet('data3')
s1.write(0, 0, '数据1')
wb1.save('files/data1.xls')

总的

import xlrd
from xlutils.copy import copy
# 1.使用xlrd打开已经存在的工作簿对象(得到一个只读的工作簿)
wb = xlrd.open_workbook('files/data1.xls', formatting_info=True)

# 2.将只读的工作簿转换成可写的工作簿(在原表的基础上,新建子表,再写数据进新表)
wb1 = copy(wb)
s1 = wb1.add_sheet('data3')
s1.write(0, 0, '数据1')
wb1.save('files/data1.xls')

)

wb1 = copy(wb)
s1 = wb1.add_sheet('data3')
s1.write(0, 0, '数据1')
wb1.save('files/data1.xls')

总的

import xlrd
from xlutils.copy import copy
# 1.使用xlrd打开已经存在的工作簿对象(得到一个只读的工作簿)
wb = xlrd.open_workbook('files/data1.xls', formatting_info=True)

# 2.将只读的工作簿转换成可写的工作簿(在原表的基础上,新建子表,再写数据进新表)
wb1 = copy(wb)
s1 = wb1.add_sheet('data3')
s1.write(0, 0, '数据1')
wb1.save('files/data1.xls')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值