目录
一、写入
1.1 安装 xlwt
1.2 增加sheet页
1.2.1 新建sheet页
1.2.2 sheet页写入数据
1.2.3 excel保存
1.2.4 完整代码
1.2.5 同一坐标,重复写入
二、读取
2.1 安装读取模块
2.2 读取sheet页
2.2.1 序号读取shee页
2.2.2 通过sheet页的名称读取sheet页
2.2.3 打印出表格中数据最远的行数和列数
2.2.3.1 打印最远行数
2.2.3.2 打印列数(用得不多)
2.2.4 循环获取行的数据
三、修改
3.1 安装修改模块
3.2 copy读取到的sheet页并修改
安装指令:pip install xlwt
安装完成,导入xlwt后,xlwt中有一个函数,Workbook()
Workbook()函数以变量进行储存
rt xlwt
excel = xlwt.Workbook()
excel.add_sheet(参数1,参数2)
参数1:sheet页名称
参数2:是否允许覆盖,默认为false(可不写)
# excel.add_sheet("login") # 登录sheet页
# 并把该sheet页赋值给一个变量
sheet = excel.add_sheet("login")
此时,需要往sheet页中写入内容
存储sheet页的变量.write(行,列,内容)
行和列的序号从 0 开始
例如:在第二行第三列的单元格中输入 HelloWord
excel.write(2,3,"HelloWord") # 这是错误的写法,会报错没有这个write方法
sheet.write(2,3,"HelloWord")
在完成写入后,需要对excel进行保存
excel.save(参数1)
参数1:保存的文件路径,确定到文件名,路径为绝对路径
excel文件的后缀有两个格式:xls、xlsx
excel.save("D:/Test/test01.xlsx")
这里创建一个excel表格在D盘Test目录下,把上面sheet页的数据写入到该表格中
# coding=utf-8
import xlwt
excel = xlwt.Workbook()
sheet = excel.add_sheet("login")
sheet.write(2, 3, "HelloWord") # 序号从0开始
excel.save("D:/Test/test01.xlsx")
如果在第二行第三列的位置中,再次进行一次输入
sheet.write(2, 3, "HelloWord")
sheet.write(2, 3, "Python")
那么则会出现一个单元格覆盖错误的问题,以及单元格的覆盖写入是否OK
如果需要允许覆盖写入,就需要在sheet页后面,添加允许覆盖写入的参数
sheet页变量 = excel.add_sheet("sheet页名",cell_overwrite_ok=true)
sheet = excel.add_sheet("login", cell_overwrite_ok=True)
完整代码
sheet = excel.add_sheet("login", cell_overwrite_ok=True)
sheet.write(2, 3, "HelloWord")
sheet.write(2, 3, "Python")
执行指令:pip install xlrd
安装完xlrd后,需要进行导入,然后进行读取文件
import xlrd
xlrd.open_workbook("读取的文件名称")
文件的名称可以用变量进行存储
import xlrd
filename = "D:/Test/test01.xlsx"
excel = xlrd.open_workbook(filename)
读取sheet页,可以通过名称和序号进行读取,但是建议通过名称进行读取,序号可能会因其他原因发生改变
序号读取语法:excel.sheet_by_index(序号)
序号从0开始
可以测试打印一下
# 读取sheet页
sheet = excel.sheet_by_index(1)
print(sheet)
运行,发生报错:list index out of range
报错:我提供的序号已经超出了这个sheet的序号
打开写操作的excel表,底部是只有一个sheet
那么,序号应该是从 0 开始
sheet = excel.sheet_by_index(0)
print(sheet)
打印结果:Sheet 0:
语法:excel.sheet_by_name("sheet名")
# 通过名称的方式获取sheet页
sheet = excel.sheet_by_name("login")
print(sheet)
# 打印结果:Sheet 0:
执行语句:sheet.nrows
# 通过名称的方式获取sheet页
sheet = excel.sheet_by_name("login")
print(sheet.nrows) # 第八行
此处的行和列则从1开始
语法:sheet.ncols
sheet = excel.sheet_by_name("login")
print(sheet.ncols) # 5
循环的范围是:sheet.nrows
函数
1、sheet.row_values(i):获取每一行的值,每一次随着i的值发生变化,读取到的数据被list类型存储
执行循环,并把sheet.row_values(i)获取到的数据存入变量rv中
打印值和type
nr = sheet.nrows
for i in range(nr): # 8行循环八次
# 每次循环,拿到一行的数据
rv = sheet.row_values(i)
print(rv, type(rv))
"""
['', '', '', '', '']
['', '', '', '', '']
['', '', '', 'Python', '']
['', '', '', '', '']
['', '', '', 'Hello', 'Vue']
['', '', '', '', '']
['', '', '', '', '']
['', 'World', '', '', '']
"""
如果表单元格中,有数字存在,则修改为文本格式,右键-->单元格格式-->文本-->确定
手机号、数值、日期等也excek中转为文本类型
↑以上内容为单行读取
↓行内单独提取索引值
在上述内容中,通过循环sheet页的最大值,获取到每一行的数据,此时,也可以直接去通过索引赋值
nr = sheet.nrows
for i in range(nr): # 8行循环八次
# 每次循环,拿到一行的数据
rv = sheet.row_values(i)
a, b, c, d, e = rv[0], rv[1], rv[2], rv[3], rv[4]
print(f"{a},{b},{c},{d},{e}")
"""
,,,,
,,,,
,,,Python,
,,,,
,,,Hello,Vue
,,,,
,,,,
,World,,,
"""
指令:pip install xlutils
导入修改的模块
from xlutils.copy import copy
# 导入的是xlutils中的copy模块
要进行修改模块,就需要先读取,再修改
再添加读取模块
# 1、导入修改模块
from xlutils.copy import copy
# 2、导入读取模块,读取文件
import xlrd
filename = "D:/Test/test01.xlsx"
excel = xlrd.open_workbook(filename)
而要进行的修改操作,是把原有的sheet页进行copy后,再新的表进行修改
# 复制
new_excel = copy(excel)
# 读取到修改以后的excel,赋值到新的变量去修改内容
sheet = new_excel.get_sheet(0)
# 在获取到的序列写入新的内容(修改Python的值)
sheet.write(2, 3, "JavaScript")
# 保存,以新的excel保存
# 如果是原地址,则是保存,否则是另存为
new_excel.save("D:/Test/test02.xlsx")
如果保存的路径是其他的,则会另存为一个新的