1、xlutils 实现拷贝原文件
原表格:
import xlrdfromxlutils.copy import copy
workbook= xlrd.open_workbook('mcw_test.xlsx') # 打开工作簿
new_workbook=copy(workbook) # 将xlrd对象拷贝转化为xlwt对象
new_workbook.save("mcw_test.xlsx") # 保存工作簿
新工作簿的工作表内容一样,sheet2有点数据也复制出来了,只是格式没有复制过来:
2、拷贝前获取原工作簿信息
workbook = xlrd.open_workbook('mcw_test.xlsx') # 打开工作簿
sheets=workbook.sheet_names() # 获取工作簿中的所有工作表名字,形成列表元素
worksheet= workbook.sheet_by_name(sheets[0]) # 通过sheets[0]工作表名称获取工作簿中所有工作表中的的第一个工作表
rows_old=worksheet.nrows # 获取第一个工作表中已存在的数据的行数
print(sheets,sheets[0],worksheet,worksheet.nrows )-------------------------------------结果:
['魔降风云变人名单', 'Sheet2', 'Sheet3'] 魔降风云变人名单 4
3、拷贝后获得新工作簿的信息:
workbook = xlrd.open_workbook('mcw_test.xlsx') # 打开工作簿
new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象
new_worksheet = new_workbook.get_sheet(0) # 获取转化后工作簿中的第一个工作表对象
print(new_worksheet,new_workbook,new_worksheet.name) #有时间整理下工作表对象的方法,工作表可以.name
----------------------------结果:
魔降风云变人名单
4、拷贝后直接修改文件内容:
import xlrd
import xlwtfromxlutils.copy import copy
# 打开想要更改的excel文件
old_excel= xlrd.open_workbook('mcw_test.xlsx', formatting_info=True)
# 将操作文件对象拷贝,变成可写的workbook对象
new_excel=copy(old_excel)
# 获得第一个sheet的对象
ws= new_excel.get_sheet(0)
# 写入数据
ws.write(0, 0, '第一行,第一列')
ws.write(0, 1, '第一行,第二列')
ws.write(0, 2, '第一行,第三列')
ws.write(1, 0, '第二行,第一列')
ws.write(1, 1, '第二行,第二列')
ws.write(1, 2, '第二行,第三列')
# 另存为excel文件,并将文件命名,可以重新命名,应该也可以覆盖掉
new_excel.save('new_mcw_test.xlsx')
5、读取文件,根据标题行和姓名列获取所有单元格索引坐标。
#我要修改小郭吹雪的爱好为喝水
#需求分析:我需要知道"小郭吹雪的行号"和“爱好”的列号。我要修改的内容就是行号和列号所对应的单元格。代码修改就可以用行列索引
import xlrd
import xlwt
from xlutils.copy import copy
workbook = xlrd.open_workbook('mcw_test.xlsx') # 打开工作簿
Data_sheet = workbook.sheets()[0]
row1 = Data_sheet.row_values(0) #取出第一行
dic_col_s={str(i):row1[i] for i in range(0,len(row1))} #将第一行的每个元素加个序数标记,标记列表索引,让列表索引和标题对应,由标题则可以从字典获取列号,即列表索引+1,这里需要的是索引
col2=Data_sheet.col_valu