xlutils的使用

导语

xlrd和xlwt模块主要是针对excel表格的读取和写入,但是一些操作和处理数据的操作还是需要根据xlutils这个模块来实现。

1、拷贝原文件

import xlrd
from xlutils.copy import copyworkbook = xlrd.open_workbook('test.xlsx')  # 打开工作薄
new_workbook = copy(workbook)  # 将获取的xlrd文件对象,拷贝为xlwt对象
new_workbook.save('new_test.xlsx')  # 保存工作薄

2、拷贝前获取原工作薄的信息

workbook = xlrd.open_workbook('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)

3、拷贝后获取新工作薄的信息

workbook = xlrd.open_workbook('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、拷贝后直接修改文件内容

# 打开想要更改的excel文件
old_excel = xlrd.open_workbook('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_test_1.xlsx')

5、获取所有单元格索引坐标

workbook = xlrd.open_workbook('test.xlsx')  # 打开工作簿
Data_sheet = workbook.sheets()[0]
row1 = Data_sheet.row_values(0)  # 取出第一行
dic_col_s = {str(i): row1[i] for i inrange(0, len(row1))}  # 将第一行的每个元素加个序数标记,标记列表索引,让列表索引和标题对应,由标题则可以从字典获取列号,即列表索引+1,这里需要的是索引
col2 = Data_sheet.col_values(0)  # 取出第一列,
dic_row_s = {str(i): col2[i] for i inrange(0, len(col2))}  # 将第一列的每个元素加个序数标记,标记为第一列的列表索引。让名字和列表索引对应,就可以在字典中由名字得行号,即列表索引+1。这里需要的是这个索引
mtitle = "gender"  # 需要修改哪个标题
mname = "tank"  # 需要修改哪个人的
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])  # 获取要修改的那个人所在的列索引print(f"rindex:{rindex},cindex:{cindex}")---------------------------------执行结果-------------------------------------
{'0': 'name', '1': 'class', '2': 'cid', '3': 'gender'}
{'0': 'name', '1': 'sean', '2': 'tank', '3': 'jason'}
rindex:2,cindex:3

6、修改单元格内元素

rindex = list(rindex)
rindex = "".join(rindex)
rindex = int(rindex)cindex = list(cindex)
cindex = "".join(cindex)
cindex = int(cindex)# 打开想要更改的excel文件
old_excel = xlrd.open_workbook('test.xlsx', formatting_info=True)
# 将操作文件对象拷贝,变成可写的workbook对象
new_excel = copy(old_excel)
# 获得第一个sheet的对象
ws = new_excel.get_sheet(0)
# 写入数据
ws.write(rindex, cindex, 'dsb')  # 修改第3行第4列
# 另存为excel文件,并将文件命名,可以重新命名,应该也可以覆盖掉
new_excel.save('new_test_2.xlsx')

7、(改)函数:读取单元格索引,修改单元格内元素

fpath = 'test.xlsx'
mname = "sean"
mtitle = "hobby"
modifycontent = "read"def recindex(path, mname, mtitle):'''定位单元格,返回单元格行列索引供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(0)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)

8、(增)函数:添加多条数据

fpath = 'test.xlsx'
valueli = [["oscar", "4", "4", "male", "搓衣板"],["kiven", "5", "5", "male", "腰子汤"], ]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)

9、(查1)函数:以制表符分割,显示每行数据

fpath = "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)

10、(查2)函数:

fpath = "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)

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)


[![img](https://img-blog.csdnimg.cn/img_convert/6cbc77087fe5355813c275c432f55267.png)](https://img2018.cnblogs.com/blog/1825659/201911/1825659-20191115212506536-1512117173..png)

python 模块使用(二十九)之xlutils相关推荐

  1. python控制苹果手机触摸,Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战...

    简介 在网页中我们经常使用缩放操作来便利的查看具体的信息,在appium中使用MultiAction多点触控的类来实现.MultiAction是多点触控的类,可以模拟用户多点操作.主要包含加载add( ...

  2. 夜光带你走进python开发 (二十九)传奇语言

    夜光序言: 如果你越来越冷漠,你以为你成长了,但其实没有.长大应该是变得温柔,对全世界都温柔. 正文:函数和递归 函数和程序结构  函数可以简化程序,函数可以使程序模块化  用函数将较长的程序分割 ...

  3. 【Python学习系列二十九】scikit-learn库实现天池平台智慧交通预测赛

    1.背景:https://tianchi.aliyun.com/competition/introduction.htm?spm=5176.100066.0.0.3f6e7d83RQgWEL& ...

  4. Python学习日记(二十九) 网络编程

    早期的计算机通信需要有一个中间件,A要给B传东西,A必须要把信息传给中间件,B再把从中间件中拿到信息 由于不同机器之间需要通信就产生了网络 软件开发的架构 1.C/S架构 服务器-客户机,即Clien ...

  5. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十九:LCD模块

    实验二十九:LCD模块 据说Alinx 301支持 7"TFT,好奇的朋友一定疑惑道,它们3.2"TFT以及7"TFT等两者之间究竟有何区别呢?答案很简单,前者自带控制器 ...

  6. BetaFlight模块设计之二十九:滤波模块分析

    BetaFlight模块设计之二十九:滤波模块分析 滤波模块 滤波类型 1. slewFilter 2. simpleLowpassFilter 3. laggedMovingAverage 4. p ...

  7. Python模块之二:Python3 常用模块总结

    Python模块之二:Python3 常用模块总结 一.random模块 提供一些随机数获取的相关方法 1.常用方法 1.random():获取[0.0,1.0)范围内的浮点数 2.randint(a ...

  8. SAP UI5 应用开发教程之二十九 - SAP UI5 的路由和导航功能介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  9. Python学习笔记(十九)面向对象 - 继承

    Python学习笔记(十九)面向对象 - 继承 一.继承的概念 # 继承:子类继承父类的所有方法和属性# 1. 子类 class A(object):def __init__(self):self.n ...

最新文章

  1. Delphi XE 10.2.3使用CEF4Delphi取网页元素时碰到nbsp;变问号?的处理
  2. matlab中nlfilter函数,matlab的一些关于块分类的函数~~~
  3. Unity3D面试ABC
  4. 【LeetCode笔记】剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(Java、二叉树、dfs)
  5. 锻炼编程逻辑_通过锻炼提高编程技巧
  6. java swing 窗口事件_Javaswing多类窗口怎么写按钮事件呢?
  7. dns提供商主机名_DNS域名解析的过程
  8. Android实现XML解析技术
  9. Spring Aop(八)——advisor标签
  10. 基于有道API的命令行词典(golang版)
  11. 批量图片验证模型错误: OP_REQUIRES failed at save_restore_v2_ops.cc:184 : Not found: Key conv1_1/bias not found
  12. 反向题在测试问卷信效度_问卷前测除了信效度,你还需知道...
  13. Home Assistant 自动化
  14. R语言caret包preProcess()标准化出现错误: Matrices or data frames are required for preprocessing
  15. Sparc架构中的栈与寄存器
  16. windows10和linux流畅,《古墓丽影10:崛起》Linux平台与Windows平台流畅度对比
  17. windows如何查看内存条型号信息cpu型号信息 # 包括 内存条个数 和 cpu个数
  18. Windows系统不用工具软件查看U盘VID和PID的方法
  19. 【日常分享】规格化成绩如何计算
  20. 是否有 API 可供云对接?

热门文章

  1. C语言“水仙花数”是一个正三位数,他的个位十位百位的立方和等于他本身
  2. c语言输入一个英文字母输出它的前后本身字母
  3. 婚礼请帖_第一次在线婚礼发生在1876年
  4. 微信公众号 开发详解02【自动回复、发布文章、自定义菜单、3种链接跳转】
  5. 霍尔效应传感器的典型应用场合解析
  6. 用 HTML5 造个有诚意的 23D 招聘稿
  7. JAVA公路车几何图_单车基械匠:读懂自行车几何角度图,是你成为老鸟的关键一步...
  8. python关于re模块(正则表达式)
  9. 串口的使用-ttyUSB0设备
  10. 智能建筑中的机房空调与新风系统