python处理Excel常用模块:xlrd/xlwt/xlsxwriter/openpyxl/pandas/win32.com差异比较汇总以及常用使用方法

news2024/12/23 0:08:05

一、各模块优缺点比较

模块xlrdxlwt xlsxwriteropenpyxlpandaswin32.com
YESNONOYESYESYES
NOYESYESYESYESYES
速度比较快比较快超慢
功能一般一般超强
执行速度

支持处理对xls、xlsx、xlsm,效率较高

只写,并且写入耗时较小,效率高

 

 同样读取Excel,测试过程中,读取速度相较xlrd个人感受慢很多

 

 

注意事项

不支持写操作

不支持xlsx
修改原有Excel里面的内容需要搭配xlutils使用

不支持.xls格式
不支持修改,每次重写

不支持.xls格式

 

 

推荐场景
(个人过往使用经验-仅供参考)

只读首选推荐

输出比较简单的,Excel样式要求不高推荐

输出较高版本Excel,追求表格样式颜值,插入图片等推荐使用

读写一体,可以保留原始格式修改单元格的值,适合对自动化输出格式有比较复杂要求的需求,比如事先定好空表,并设置自动换行、字体、对其、颜色、边框等等格式,并且这些格式改动比较频繁。据官网介绍适合多进程使用场景

 

 

更全的具体使用博客推荐 【Python学习】利用xlwt设置Excel单元格格式 - gtea - 博客园    

二、各模块常用使用方法

1、xlrd

import xlrd
#获取工作簿
wb=xlrd.open_workbook('文件绝对路径/相对路径')
#获取全部工作表名
sheetnames=wb.sheet_names()
#获取工作表内容
sheet_content1 = wb.sheet_by_name('Sheet1')#根据工作表名称获取
sheet_content2 = wb.sheet_by_index(0) #根据工作表索引获取,从下标0开始计数
sheet_content3 = wb.sheets()[0] #根据工作表索引获取,从下标0开始计数
#获取整个表有效总行数总列数
rows_length = sheet_content2.nrows #有效总行数
cols_length = sheet_content2.ncols #有效总列数
# 获取整个表每一行的值,是一个生成器集合,使用需要for循环遍历,存储的结果为:[[全体第一行第1列单元格值类型:'具体值',第2列单元格值类型:'具体值',……],[第二行全部内容],[第三行全部内容]]
rows_content = sheet_content2.get_rows()
#获取具体单元格值
cell_value = sheet_content2.cell_value(0,0) #根据(row,col)索引获取,行列均从下标0开始计数

2、xlwt

官网说明文档:API Reference — xlwt 1.3.0 documentationhttps://xlwt.readthedocs.io/en/latest/api.html

import xlwt
# 定义workbook
wb = xlwt.Workbook()

# 添加sheet,这个sheet的名字叫'Style'
sheet = wb.add_sheet('Sheet1')

#设置Excel格式样式方法:【start】
#①声明一个样式模板,②声明一个具体的样式,③把具体样式塞进样式模板里面,④写Excel表格的时候用样式模版把格式设置上去
#步骤①声明一个样式模板 style_demo
style_demo = xlwt.XFStyle()
# style_demo2 = xlwt.Style.easyxf("Font-name"="微软雅黑";"align":"center")
# help(xlwt.Style.easyxf)
#步骤②声明一个具体的样式
# a.设置字体样式
font_demo = xlwt.Font()
font_demo.name = 'Calibri'  # 设置字体 "Calibri/微软雅黑/……"
font_demo.colour_index = 4  # 设置字体颜色值
font_demo.height = 400  # 字体大小
font_demo.bold = False  # 字体是否加粗,"True/False"

# b.边框样式
borders_demo = xlwt.Borders()
borders_demo.top_colour = 6     
# 设置单元格边框颜色值,注意上下边框,左右边框颜色最好设置一致,左右边框设置不同颜色会出现覆盖,一个单元格右边框是另一个单元格的左边框
borders_demo.bottom_colour = 6
borders_demo.left_colour = 7
borders_demo.right_colour = 4
borders_demo.top = True  # 单元格顶部边是否设置边框 "True/False"
borders_demo.bottom = True  # 单元格顶部边是否设置边框 "True/False"
borders_demo.left = True  # 单元格顶部边是否设置边框 "True/False"
borders_demo.right = True  # 单元格顶部边是否设置边框 "True/False"

#步骤③ 把步骤②设置出来的具体样式设置,全部添加到整体样式模板style_demo里面
style_demo.font = font_demo
style_demo.borders = borders_demo
# 设置Excel格式样式方法:【end】
# 设置Excel格式样式其他案例: https://blog.csdn.net/zhouz92/article/details/106833511

# 写入数据
row = 0  # 行
column = 0  # 列
for value in range(72):
    sheet.write(row, column, value,style_demo)  
# 写入数据,第row行,第column列,具体内容是value,单元格样式使用style_demo(可选,可以不带格式写入使用默认格式)
    column += 1
    if column > 8:
        column = 0
        row += 1
result_apth=r'../../mytest.xls' #强行保存为xlsx不会报错,但是结果表打开会报错
# 定义保存Excel的位置和文件名。默认是和代码存在一个路劲下面。
wb.save(result_apth)

3、xlsxwriter


 官网说明文档:可以查看字体、单元格各种格式设置的key名称和使用方法

The Format Class — XlsxWriter Documentationhttps://xlsxwriter.readthedocs.io/format.html

 颜色配色代码:
http://www.360doc.com/content/13/1120/12/14695328_330723062.shtml http://www.360doc.com/content/13/1120/12/14695328_330723062.shtml%C2%A0

import xlsxwriter

    # 定义workbook
    wb = xlsxwriter.Workbook(u'../../mytest.xlsx')

    # 添加sheet,这个sheet的名字叫'Style'
    sheet = wb.add_worksheet('results')

    #设置单元格列宽
    sheet.set_column('A:L', 10)
    sheet.set_column('M:M', 15)
    #设置单元格格式样式:单元格加边框,值居中,微软雅黑,9号字体,粉色填充,白色字体;
    #单元格格式样式key可以参考官网地址,寻找要设置的格式key名称和对应值域
    style_demo = wb.add_format(
        {'bold': True, 'align': 'center', 'font_name': '微软雅黑', 'font_size': 9, 'bg_color': '#FF1493',
         'font_color': '#FEFEFE'})
    # 还有其他格式设置示例可以参考:http://maoyao.blog.51cto.com/8253780/1772102

    # 写入数据
    row = 0  # 行
    column = 0  # 列
    for value in range(72):
        sheet.write(row, column, value,style_demo)  # 写入数据,第row行,第column列,具体内容是value,单元格样式使用style_demo(可选,可以不带格式写入使用默认格式)
        column += 1
        if column > 8:
            column = 0
            row += 1
    # 定义保存Excel
    wb.selected
    wb.close() # excel使用完成需要关闭,否则会报错



4、openpyxl

 官网说明文档:

openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files — openpyxl 3.0.9 documentationhttps://openpyxl.readthedocs.io/en/stable/

    import openpyxl
    #excel 不存在的情况
    wb = openpyxl.Workbook()  #新建工作簿
    sheet0 = wb.sheetnames[0]  #新建工作簿的时候,模块将自动新建一个工作簿名“Sheet”
    sheet1 = wb.create_sheet('results2')  #工作簿中新建工作表“results2”,不指定名称的时候,默认创建为“Sheet1”,创建新的工作表那么结果Excel将有两个工作表=默认的“Sheet”+新建的
    print(sheet0.title)
    # ①全体遍历读取单元格数据 --遍历方式有点与众不同
    for row in sheet0.rows:  #每一个row 就是Excel的一行,读取单个单元格,就需要在遍历row,从里面取出具体值
        for cell in row:
            print(cell.value)

    # ②读取目标单元格的值 --明确单元格行列的情况下
    print(sheet0['A1'].value)  #取A列第1行,格式必须和Excel操作时单元格的位置一样,不可以用第0行第0列使用sheet['00']不会报错但没值
    print(sheet0['A'])  #取出第A列的全体单元格,需要取值,则需要再次遍历里面的cell,通过cell.value打印单元格的值,同上面①遍历单元格数据使用方式一致
    print(sheet0['A:B'])  #取出第A列-B列的全体单元格,取值方式同上

    # 带格式修改单元格的值
    sheet0.cell(row=1, column=1, value='测试1') #特别注意!,调用cell方法的时候,行列用下标索引形式读取,下标索引从1开始计算
    sheet0['B2'] = '测试2'
    # # 定义保存Excel
    wb.save('file_path.xlsx')#excel结果绝对路径
    wb.close() # excel使用完成需要关闭,否则会报错

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

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

相关文章

x 的平方根——力扣69

文章目录 题目描述法一 二分查找 题目描述 法一 二分查找 int mySqrt(int x){int l0, rx, ans-1;while(l<r){int mid (lr)/2;if((long long)mid*mid<x){ansmid;lmid1;} else {rmid-1;}}return ans;}

“用户登录”测试用例总结

前言&#xff1a;作为测试工程师&#xff0c;你的目标是要保证系统在各种应用场景下的功能是符合设计要求的&#xff0c;所以你需要考虑的测试用例就需要更多、更全面。鉴于面试中经常会问“”如何测试用户登录“”&#xff0c;我们利用等价类划分、边界值分析等设计一些测试用…

initDB时,数据库的ip地址、用户名、密码全都正确,但是连不上 oracle

选择解决方案。右击选中属性&#xff0c;修改生成的目标平台&#xff1a;

那到底是嵌入式累还是程序员累?

累的定义有很多&#xff0c;有体力上的&#xff0c;精力上的&#xff0c;也有心理上的&#xff0c;而心理的累才是真的累。 先来说说体力上的&#xff0c;现在不像60年代&#xff0c;上山砍柴扛几公里来挣钱&#xff0c;时代在进步&#xff0c;逐渐从体力到脑力转变。 以前那…

在开酒吧前要知道的9条干货

最近总结了一下很多人开酒吧期间遇到的问题&#xff0c;整理出了一些干货&#xff0c;希望能对有开酒吧想法的小白们有所帮助。1、开酒吧之前要去做好市场调研和风险评估&#xff0c;这能帮助你大致了解所选地区的情况2、开酒吧之前要做好前期亏损的准备&#xff0c;准备好一定…

Linux 的基本指令(1)

今天学习了关于操作系统相关概念的知识&#xff0c;对操作系统的作用有了简单的了解。 操作系统是一款对软硬件管理的软件&#xff0c;还要达到为上层用户提供良好的、稳定的、安全的运行环境。 指令1&#xff1a;ls 显示当前目录下的文件列表&#xff08;只显示文件名&#x…

多输入通道和多输出通道

多输入通道和多输出通道 互相关运算一个简单的图像示例 互相关运算 当输入数据含多个通道时&#xff0c;我们需要构造一个输入通道数与输入数据的通道数相同的卷积核&#xff0c; 从而能够与含多通道的输入数据做互相关运算。一个简单的图像示例

Docker Sybase修改中文编码

镜像&#xff1a;datagrip/sybase 镜像默认用户名sa&#xff0c;密码myPassword&#xff0c;服务名MYSYBASE 1.进入容器 docker exec -it <container_name> /bin/bash2.加载Sybase环境变量 source /opt/sybase/SYBASE.sh3.查看是否安装了中文字符集 isql -Usa -PmyP…

[LeetCode]顺序表相关题目(c语言实现)

文章目录 LeetCode27. 移除元素LeetCode283. 移动零LeetCode26. 删除有序数组中的重复项 ⅠLeetCode80. 删除有序数组中的重复项 IILeetCode88. 合并两个有序数组 LeetCode27. 移除元素 题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元…

WAVE SUMMIT 定档8月16日,或将曝百度飞桨、文心大模型最新进展

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

时间复杂度为O(nlogn)的两种排序算法

1.归并排序 归并排序的核心思想&#xff1a;如果要排序一个数组&#xff0c;我们先把数组从中间分成前后两部分&#xff0c;然后对前后两部分分别排序&#xff0c;再将排好序的两部分合并在一起&#xff0c;这样整个数组就都有序了。 归并排序使用的就是分治思想。分治&#x…

基于小程序+spring boot流浪动物救助系统-计算机毕设 附源码12783

小程序spring boot流浪动物救助系统 摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;流浪动物救助系统被用…

Zabbix-agent批量部署脚本Linux and Windows(部署300+可用)

之前一直使用的是VC自动发现监控虚拟机&#xff0c;后来发现VC自动发现的虚拟机监控在OS内部性能方面存在数据差异&#xff0c;举例vmware.vm.memory.usage这个参数获取的数值和实际系统内部使用的完全不一致&#xff0c;还要会出现数据混乱的情况&#xff0c;就不一一叙述了&a…

2023年接口测试面试题大全,接口测试面试秘籍...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 HTTP接口传递数据…

Vue.js2+Cesium 四、模型对比

Vue.js2Cesium 四、模型对比 Cesium 版本 1.103.0&#xff0c;低版本 Cesium 不支持 Compare 对比功能。 Demo 同一区域的两套模型&#xff0c;实现对比功能 <template><div style"width: 100%; height: 100%;"><divid"cesium-container"…

Istio 安全 授权管理AuthorizationPolicy

这个和cka考试里面的网络策略是类似的。它是可以实现更加细颗粒度限制的。 本质其实就是设置谁可以访问&#xff0c;谁不可以访问。默认命名空间是没有AuthorizationPolicy---允许所有的客户端访问。 这里是没有指定应用到谁上面去&#xff0c;有没有指定使用哪些客户端&#…

Socket 前端项目结构搭建

npm install socket.io-client --savenpm install element-plus --savenpm install vue-router4.0.12 --save简单的页面搭建 聊天系统登录前端实现 登录模板 <template><div class"login-container"><el-form ref"form" :model"fo…

现在的00后软件测试工程师,实在是太卷了

现在的小年轻真的卷得过分了。前段时间我们公司来了个00年的&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天&#xff0c;原来这位小老弟家里条…

QDial

QDial 提供了一个圆角范围控制&#xff08;类似速度计&#xff09;。值的范围是0-99整数。 // 该信号受tracking值影响&#xff0c;当trackingfalse时&#xff0c;在释放按钮才发出该信号。当trackingtrue时&#xff0c;当值发生变化就会发出该信号。默认值是true。 // 使用函…

yolov3-tiny原理解析及代码分析

前言 从去年十一月份开始学习yolo神经网络用于目标识别的硬件实现&#xff0c;到现在已经六个月了。一个硬件工程师&#xff0c;C/C基础都差劲的很&#xff0c;对照着darknet作者的源码和网上东拼西凑的原理讲解&#xff0c;一点一点地摸索。刚开始进度很慢&#xff0c;每天都…