【使用xlrd、xlutils读写excel】

使用xlrd、xlutils读写excel

    • 1、环境和版本
    • 2、相关使用方法封装
      • 2.1 根据行下标返回对应行数据
      • 2.2 根据列下标返回对应列数据
      • 2.3 读取指定单元格数据
      • 2.4 通过表单名读取全部数据
      • 2.5 通过表索引读取全部数据
      • 2.6 向已存在sheet中追加数据
      • 2.7 原文件基础上新建的sheet并写入数据
    • 3、其他踩坑

1、环境和版本

  • 电脑:win
  • excel文件格式.xls
  • xlrd 版本 1.2.0(高版本存在部分属性不兼容),安装指定版本pip install xlrd == 1.2.0
  • xlutils 版本:2.0.0

2、相关使用方法封装

2.1 根据行下标返回对应行数据

def read_excel_by_row(file_path, sheet_index, row_index):"""读取指定行数据"""data = xlrd.open_workbook(file_path)sheet = data.sheet_by_index(sheet_index)nrows = sheet.nrows  # 行数ncols = sheet.ncols  # 列数try:table_list = sheet.row_values(rowx=row_index, start_colx=0, end_colx=None)  # start_colx:开始列,end_colx:结束列return table_listexcept Exception as e:print("当前表单行数%s行%s列" % (nrows, ncols), e)

2.2 根据列下标返回对应列数据

def read_excel_by_col(file_path, sheet_index, col_index):"""读取指定列数据"""data = xlrd.open_workbook(file_path)sheet = data.sheet_by_index(sheet_index)nrows = sheet.nrows  # 行数ncols = sheet.ncols  # 列数try:table_list = sheet.col_values(colx=col_index, start_rowx=0, end_rowx=None)  # start_rowx:开始行,end_colx:结束行return table_listexcept Exception as e:print("当前表单行数%s行%s列" % (nrows, ncols), e)

2.3 读取指定单元格数据

def read_excel_by_cell(file_path, sheet_index,row_index,col_index):"""读取指定单元格数据:param file_path: 文件路径. .xls格式的文件:param sheet_index: sheet表索引:param row_index: 行下标:param col_index: 列下标:return: 第row_index行col_index数据"""wb = xlrd.open_workbook(file_path)sheet = wb.sheet_by_index(sheet_index)value = sheet.cell_value(row_index, col_index)# value_type = sheet.cell_type(row_index, col_index) # 单元格类型  0->empty,1->string,2->number,3->date,4->boolean,5->errorreturn value

2.4 通过表单名读取全部数据

def red_excel_by_sheet_name(file_path, sheet_name):"""读取excel数据并返回:param file_path: 文件路径 .xls文件:param sheet_index: sheet表单所以:return: 表单List"""data = xlrd.open_workbook(file_path)# table = data.sheet_by_index(sheet_index)table = data.sheet_by_name(sheet_name)# 表格行数nrows = table.nrows #行数ncols = table.ncols# print(nrows, ncols)table_list = []for row_index in range(0, nrows):temp_list = table.row_values(rowx=row_index, start_colx=0, end_colx=None)  # start_colx:开始列,end_colx:结束列table_list.append(temp_list)return table_list

2.5 通过表索引读取全部数据

def red_excel_by_sheet_index(file_path, sheet_index):"""通过表单索引读取excel数据并返回:param file_path: 文件路径:param sheet_index: 表单索引:return:对应表单的数据"""data = xlrd.open_workbook(file_path)table = data.sheet_by_index(sheet_index)# table = data.sheet_by_name(sheet_index)# 表格行数nrows = table.nrowsncols = table.ncols# print(nrows, ncols)table_list = []for row_index in range(0, nrows):temp_list = table.row_values(rowx=row_index, start_colx=0, end_colx=None)  # start_colx:开始列,end_colx:结束列table_list.append(temp_list)return table_list

2.6 向已存在sheet中追加数据

def append_to_sheet(file_path, sheet_tag, data):"""向已存在的表中追加数据:param file_path: 文件路径(sheet已经存在的情况):param sheet_tag: sheet表标识 sheet_name or sheet_index:param data: 要追加的数据:return: None"""try:# 打开文件openFile = xlrd.open_workbook(file_path)# 读取文件,准备写入信息if isinstance(sheet_tag, int): #如果参数是int根据索引查找表单max_row = openFile.sheet_by_index(sheet_tag).nrowselse: #如果参数是str根据名称查找表单max_row = openFile.sheet_by_name(sheet_tag).nrowsprint("当前最大行=", max_row)write = copy(openFile)write_sheet = write.get_sheet(sheet_tag)start_row = max_row  # 从表格的第5行开始写入数据# 一行一行的写,一行对应的所有列for d in data:  # 控制行col = 0for value in d:  # 控制每一列write_sheet.write(start_row, col, value)  # rou代表列,col代表行,value写入值col += 1start_row += 1# 保存write.save(file_path)except FileNotFoundError:print(f"文件 {file_path} 未找到。")except xlrd.XLRDError:print("无法读取Excel文件,请检查文件格式或内容。")except Exception as e:print(f"发生未知错误:{e}")

2.7 原文件基础上新建的sheet并写入数据

def append_date_to_new_sheet(file_path, sheet_name,data):"""原文件基础上新建的sheet并写入数据:param file_path::param sheet_name::param data:list数据,例:data = [[1,2],[3,4]]:return:None"""openFile = xlrd.open_workbook(file_path)write = copy(openFile)write.add_sheet(sheet_name)write_sheet = write.get_sheet(sheet_name) # 已存在的表单,实际需要新建row = 0  # 从表格的第二行开始写入数据# 一行一行的写,一行对应的所有列for d in data:  # 控制行col = 0for one in d:  # 控制每一列write_sheet.write(row, col, one)  # rou代表列,col代表行,one写入值col += 1row += 1write.save(file_path)

3、其他踩坑

xlrd 仅1.2.0 版本支持.xls 文件,更高版本不支持,没有删除sheet功能
openpyxl 支持.xlsx 读取的时候一直显示文件被损坏, 不支持.xls格式,有remove功能,但是使用过程中也有问题,后续研究明白再做补充吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/757298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构奇妙旅程之冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算…

医学YOLOv8 | 脑肿瘤检测实战

在医疗保健领域,准确和高效地识别脑肿瘤是一个重大挑战。本文中,我们将探讨一种使用 YOLOv8,一种先进的目标检测模型,将脑肿瘤进行分类的新方法,其准确率达到了 99%。通过将深度学习与医学图像相结合,我们希…

代码随想录阅读笔记-字符串【翻转字符串中单词】

题目 给定一个字符串,逐个翻转字符串中的每个单词。 示例 1: 输入: "the sky is blue" 输出: "blue is sky the" 示例 2: 输入: " hello world! " 输出: "world! hello" 解释: 输入字符串可以在前…

阿里云ECS服务器安装java环境相关软件

当前服务器版本为:Alibaba Cloud Linux 3.2104 LTS 64位 # lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: AlibabaCloud Description: Alibaba Cloud Linux release 3 (Soaring Falcon) Release: 3 Codename: SoaringFalcon# cat…

数据库简答题:期末+复试

文章目录 1.事务的特性:2.并发操作带来的数据不一致:4.区别几种范式:5.数据、数据库、数据库管理系统、数据库系统6.关系、关系模式和关系数据库的区别:7.关系数据库的特点:8.数据模型包括什么:9.逻辑独立性、物理独立性:10.人工管理阶段和数据库系统和文件系统的区别:11.等值连…

【Android】【Bluetooth Stack】蓝牙电话本协议分析(超详细)

1. 精讲蓝牙协议栈(Bluetooth Stack):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论 2. 欢迎大家关注和订阅,【蓝牙协议栈】专栏会持续更新中.....敬请期待! 目录 1. 协议简述 1.1 PBAP…

个人商城系统开源(配置支付宝支付2)

原文地址:个人商城系统开源(配置支付宝支付2) - Pleasure的博客 下面是正文内容: 前言 在上一篇文章中我曾提到过关于网站支付宝支付的方法,接下来我们来介绍第二种。 个人博客地址:个人商城系统开源&…

GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例应用

随着航空、航天、近地空间等多个遥感平台的不断发展,近年来遥感技术突飞猛进。由此,遥感数据的空间、时间、光谱分辨率不断提高,数据量也大幅增长,使其越来越具有大数据特征。对于相关研究而言,遥感大数据的出现为其提…

FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+GTX 8b/10b编解码SFP光口传输,提供2套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博主所有FPGA工程项目-->汇总目录本博已有的 SDI 编解码方案本方案的SDI接收发送本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI…

C++:类和对象(上篇)

目录: 一:面向对象和过程的介绍 二:类的引入 三:类的定义 四:类的访问限定符以及封装 五:类的作用域 六:类的实例化 七:类对象大小的计算 八:类成员函数的this指…

【Linux】编译器-gcc/g++的使用(预处理、编译、汇编、连接)

目录 01.预处理(宏替换) 02.编译(生成汇编) 03.汇编(生成机器可识别码) 04.连接(生成可执行文件或库文件) 05.选项 编译器在编译代码时包含以下四个步骤:1.预处理 2…

商品规格存储问题

准备条件 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version> <!-- 指定您需要的 FastJSON 版本 --></dependency>Testvoid test6() {// 创建 JSON 对象JSONObjec…

MongoDB启动报错

spring boot 引入MongoDB启动报错 java.lang.IllegalStateException: Failed to introspect Class [io.micrometer.core.instrument.binder.mongodb.DefaultMongoConnectionPoolTagsProvider] from ClassLoader [sun.misc.Launcher$AppClassLoader18b4aac2] at org.springfra…

爬虫综合案例-获取房源信息并在地图上显示

文章目录 1.项目介绍2.项目分析3.爬取房源信息4. 导入高德地图5.地图上显示房源信息6.运行程序 1.项目介绍 本次案例将从 58 同城信息网爬取相关城市的房源出租信息&#xff0c;然后通过高德地图把房源信息地图显示&#xff0c;通过地图进行浏览&#xff0c;点击相应的热点文字…

二叉树|二叉树的层序遍历 (广度优先搜索)

力扣题目链接 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {queue<TreeNode*> que;if (root ! NULL) que.push(root);vector<vector<int>> result;while (!que.empty()) {int size que.size();vector<int>…

网络工程师练习题3

网络工程师 在Cisco Catalyst 3548以太网交换机上建立一个名为lib105的VLAN&#xff0c;下列正确的配置是&#xff08;&#xff09;。 A.Switch-3 548#vlan 1 name lib 105 Switch-3548#exitB.Switch-3548&#xff08;valn&#xff09; 1 name lib 105C. Switch-3548&#xf…

[运维] 可视化爬虫易采集-EasySpider(笔记)

一、下载 ​下载地址 下滑到Assets页面&#xff0c;选择下载 二、解压运 ​解压压缩包&#xff0c;打开文件夹 在此文件夹下打开Linux Terimal, 并输入以下命令运行软件&#xff1a; ./easy-spider.sh 注意软件运行过程中不要关闭terminal。 三、使用 1.开始 首先点击…

使用 CSS 实现毛玻璃效果

在现代 Web 设计中,毛玻璃效果越来越受欢迎。它能够让界面元素看起来更加柔和、朦胧,同时又不会完全遮挡背景内容,给人一种透明而又不失质感的视觉体验。虽然过去实现这种效果需要借助图像编辑软件,但现在只需要几行 CSS 代码,就可以在网页上呈现出令人惊艳的毛玻璃效果。 使用…

愚人节礼物(C++)

这不愚人节 快到了吗&#xff1f;身为顶级程序员&#xff0c;不用c编写愚人节礼物那心里是很不舒服的&#xff0c;所以&#xff0c;趁着愚人节到来之际&#xff0c;下面分享一种坑朋友的c代码&#xff1a; 内容包含一些敏感词&#xff0c;如果对你产生了影响或伤害&#xff0c;…

IDEA 配置阿里规范检测

IDEA中安装插件 配置代码风格检查规范 使用代码风格检测 在代码类中&#xff0c;右键 然后会给出一些不符合规范的修改建议&#xff1a; 保存代码时自动格式化代码 安装插件&#xff1a; 配置插件&#xff1a;