python之xlutils的Copy模块(python xlutils.copy)

网友投稿 875 2022-08-28


python之xlutils的Copy模块(python xlutils.copy)

一、python之xlutils的Copy模块

xlrd库仅用于读取excel文件中的数据;

xlwt库则用于将数据写入excel文件;

但是对于已有的excel文件,想要追加或者修改,即编辑功能的时候,这两个库则没有办法完成。

xlutils库也仅仅是通过复制一个副本进行操作后保存一个新文件,xlutils库就像是xlrd库和xlwt库之间的一座桥梁,因此,xlutils库是依赖于xlrd和xlwt两个库的。这三个库既能满足操作Excel的基本需求,当然大数据分析还是需要pandas库。

xlutils模块的功能是作为xlrd和xlwt的桥梁,解决了xlrd中book对象无法编辑的问题。通过copy模块将xlrd.Book对象转换为xlwt.Workbook对象,从而实现了原始excel文件的编辑功能。

1、xlutils 实现拷贝原文件

import xlrdfrom xlutils.copy import copyworkbook = 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

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 xlrdimport xlwtfrom xlutils.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、实际应用

1)(表格函数1:改)读取单元格索引并修改单元格的两个函数

import xlrdfrom xlutils.copy import copyfpath='mcw_test.xlsx'mname="小郭吹雪"mtitle="爱好"modifycontent="睡觉"def recindex(path,mname,mtitile): ''' 定位单元格,返回单元格行列索引供modify_cell函数使用 :param path: Excel文件路径 :param mname: 要修改的名字 :param mtitile: 要修改的标题 :return: 单元格的行列索引号。rindex:行,cindex:列索引 ''' workbook = xlrd.open_workbook(path) 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))} col2=Data_sheet.col_values(1) dic_row_s={str(i):col2[i] for i in range(0,len(col2))} rindex="".join([i for i in dic_row_s if dic_row_s[i]==mname]) cindex="".join([i for i in dic_col_s if dic_col_s[i]==mtitle]) rindex=int("".join(list(rindex))) cindex=int("".join(list(cindex))) return rindex,cindexdef modify_cell(path,rindex,cindex,modifycontent): """ 修改文件指定单元格内容,由recindex函数返回值获取rindex和cindex参数 :param path: 要修改的Excel文件路径 :param rindex:recindex返回值元组第一个元素,行索引 :param cindex:recindex返回值元组第二个元素,列索引 :param modifycontent: 要修改的单元格新的内容 :return: """ old_excel = xlrd.open_workbook(path, formatting_info=True) new_excel = copy(old_excel) ws = new_excel.get_sheet(0) ws.write(rindex,cindex, modifycontent) new_excel.save(path)val=recindex(fpath,mname,mtitle)modify_cell(fpath,val[0],val[1],modifycontent)

2)(表格函数2:增)往工作表中追加多行数据

import xlrdfrom xlutils.copy import copyfpath='mcw_test.xlsx'value=[["3","明明如月","女","听歌","2030.07.01"], ["4","志刚志强","男","学习","2019.07.01"],]def write_excel_xls_append(path, value): index = len(value) # 获取需要写入数据的行数 workbook = xlrd.open_workbook(path) # 打开工作簿 sheets = workbook.sheet_names() # 获取工作簿中的所有表格 worksheet = workbook.sheet_by_name(sheets[0]) # 获取工作簿中所有表格中的的第一个表格 rows_old = worksheet.nrows # 获取表格中已存在的数据的行数 new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象 new_worksheet = new_workbook.get_sheet(0) # 获取转化后工作簿中的第一个表格 for i in range(0, index): for j in range(0, len(value[i])): new_worksheet.write(i+rows_old, j, value[i][j]) # 追加写入数据,注意是从i+rows_old行开始写入 new_workbook.save(path) # 保存工作簿 print("xls/xlsx格式表格【追加】写入数据成功!")write_excel_xls_append(fpath,valueli)

3)(表格函数3:查1)显示文件的每行内容,制表符分隔每列

import xlrdfpath="mcw_test.xlsx"def read_excel_xls(path): workbook = xlrd.open_workbook(path) # 打开工作簿 sheets = workbook.sheet_names() # 获取工作簿中的所有表格 worksheet = workbook.sheet_by_name(sheets[0]) # 获取工作簿中所有表格中的的第一个表格 for i in range(0, worksheet.nrows): for j in range(0, worksheet.ncols): print(worksheet.cell_value(i, j), "\t", end="") # 逐行逐列读取数据#分隔符加空格实现对其点的 print()read_excel_xls(fpath)-----------------------------------结果:id 姓名 性别 爱好 毕业时间 2.0 小马过河 男 跑步 2017.07.01 5.0 小郭吹雪 男 睡觉 2016.07.01 1.0 樱花小月 女 吃饭 2018.07.01 3 明明如月 女 听歌 2030.07.01 4 志刚志强 男 学习 2019.07.01

4)(表格函数4:查2)以列表形式显示文件的每行内容

import xlrdfpath="mcw_test.xlsx"def read_excel_xls(path): """ 打印所有行的内容,每行内容以列表形式展示 :param path: 要查看的Excel文件路径 """ workbook = xlrd.open_workbook(path) # 打开工作簿 sheets = workbook.sheet_names() # 获取工作簿中的所有表格 worksheet = workbook.sheet_by_name(sheets[0]) # 获取工作簿中所有表格中的的第一个表格 rows = worksheet.row_values(0) for i in range(0, worksheet.nrows): rows = worksheet.row_values(i) # 逐行逐列读取数据#分隔符加空格实现对其点的 print(rows)read_excel_xls(fpath)------------------------------------结果:['id', '姓名', '性别', '爱好', '毕业时间'][2.0, '小马过河', '男', '跑步', '2017.07.01'][5.0, '小郭吹雪', '男', '睡觉', '2016.07.01'][1.0, '樱花小月', '女', '吃饭', '2018.07.01']['3', '明明如月', '女', '听歌', '2030.07.01']['4', '志刚志强', '男', '学习', '2019.07.01']

5)(表格函数5:建)新建表格并写入数据

import xlwtfpath='修仙学院人名单.xlsx'sheet_name="小马过河工作表"valueli=[['id', '姓名', '性别', '爱好', '毕业时间'], ["3","明明如月","女","听歌","2030.07.01"], ["4","志刚志强","男","学习","2019.07.01"],]def write_excel_xls(path, sheet_name, value): index = len(value) # 获取需要写入数据的行数 workbook = xlwt.Workbook() # 新建一个工作簿 sheet = workbook.add_sheet(sheet_name) # 在工作簿中新建一个表格 for i in range(0, index): for j in range(0, len(value[i])): sheet.write(i, j, value[i][j]) # 像表格中写入数据(对应的行和列) workbook.save(path) # 保存工作簿 print("xls/xlsx格式表格写入数据成功!")write_excel_xls(fpath,sheet_name,valueli)

去期待陌生,去拥抱惊喜。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Cloud Gateway整合sentinel 实现流控熔断的问题
下一篇:使用python删除一个文件&&删除一个文件夹&&删除一个文件中的某些内容&&删除一个文件夹os.rmdir和shutil.rmtree两个方法的区别(python如何删除文件)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~