首页 > 编程语言 >提高python读写excel单元格的效率

提高python读写excel单元格的效率

时间:2024-09-27 10:21:22浏览次数:3  
标签:sheet 批量 python 写入 单元格 excel Value Range time

目录

1、批量写入一列与逐个写入一列的效率对比

2、批量读取一行

3、批量读取一列

4、批量读取二维表格

5、批量写入二维表格


使用pywin32读写excel,如果逐个单元格访问,会明显感觉到执行效率很低。因为pywin32其实是python重新封装了一下com接口,交互效率本身就低。

试了一下,其实可以通过批量读取整个range,直接批量获取表格的内容。

做了如下的对比实验:

1、批量写入一列与逐个写入一列的效率对比

分别对100个单元格进行逐个写入A列的单元格和批量写入B列的单元格,对比消耗时间。

运行代码:

import win32com.client as client
from win32com.client import constants
import os,time
print('Run')
# 新建一个Excel的应用程序
xl_app = client.gencache.EnsureDispatch("Excel.Application")
xl_app.Visible = True

wb = xl_app.Workbooks.Add()
sheet = wb.Worksheets(1)

# 逐个写入单元格
start = time.time() 
for i in range(1,101):
	sheet.Range(f"A{i}").Value = i
end = time.time()
print('Running time1: %s Seconds' % (end - start))
# 批量写入单元格
txt =[]
for i in range(1,101):
	txt.append(("list_%0d"%i,))
start = time.time() 
sheet.Range("B1:B99").Value = txt
end = time.time()
print('Running time2: %s Seconds' % (end - start))
运行结果:

运行时间比对,明显看的出批量写入效率高的多。

2、批量读取一行

示例表格:

sheet.Range("A1").Value = 1 
sheet.Range("B1").Value = 2 
sheet.Range("C1").Value = 3 
print(sheet.Range("A1:C1").Value)

打印结果:

读取结果

注意返回值是二维的元组。

3、批量读取一列

sheet.Range("A1").Value = 1 
sheet.Range("A2").Value = 2 
sheet.Range("A3").Value = 3 
print(sheet.Range("A1:A3").Value)

打印结果:

注意:虽然读取的是一列,但是返回值还是二维元组。

4、批量读取二维表格

sheet.Range("A1").Value = 1 
sheet.Range("A2").Value = 2 
sheet.Range("A3").Value = 3 
sheet.Range("B1").Value = 4 
sheet.Range("B2").Value = 5 
sheet.Range("B3").Value = 6 
print(sheet.Range("A1:B3").Value)

打印结果:

5、批量写入二维表格

rng = sheet.Range("C1:D3") 
rng.Value = ((1.0, 4.0), (2.0, 5.0), (3.0, 6.0))

因此, 只要按照读取返回的格式,就能批量的写入。

通过上述批量访问的方式,可以提高python脚本的访问excel的效率。

标签:sheet,批量,python,写入,单元格,excel,Value,Range,time
From: https://blog.csdn.net/flashman911/article/details/142432758

相关文章

  • [Python手撕]重排链表
    #Definitionforsingly-linkedlist.#classListNode:#def__init__(self,val=0,next=None):#self.val=val#self.next=nextclassSolution:defreorderList(self,head:Optional[ListNode])->None:""&quo......
  • Python线程:如何让程序跑得更快?
    引言线程(Thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以拥有多个线程,这些线程共享进程的数据空间,并能并发执行,从而提高程序的效率。在Python中使用线程,可以让我们在编写网络爬虫、多任务处理等应用时更加游刃有余。接下来,我......
  • python最经典基础算法题-10
    题目001:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n【思路】:学了lambda想耍一下,结果发现官网写的比我还简洁!n=17fenmu=range(2,n+1,2)ifn%2==0elserange(1,n+1,2)s=sum(map(lambdax:1/x,fenmu))print(s)#官网参考......
  • Python线程终止:如何优雅地结束一场“舞蹈”
    引言线程终止在多线程编程中扮演着至关重要的角色。合理地管理线程生命周期不仅能够提升程序性能,还能避免内存泄漏等问题的发生。在实际开发过程中,我们常常会遇到需要提前终止某个线程的情况,比如用户请求取消正在进行的任务、系统资源紧张时需要释放部分线程以节省资源等。掌握正......
  • python 实现gradient boosting regressor梯度增强回归器算法
    gradientboostingregressor梯度增强回归器算法介绍梯度增强回归器(GradientBoostingRegressor,简称GBR)是一种集成学习算法,专门用于解决回归问题。它通过组合多个弱学习器(通常是决策树)来构建一个强大的预测模型。以下是关于梯度增强回归器算法的详细解释:原理梯度增强回......
  • Python实现:时间序列趋势外推法应用-龚珀兹曲线拟合
    龚珀兹曲线下表数据为某跨国公司1989-2021年的年销售量数据,使用适合的模型预测该公司2022年的销售额,并得出理由。部分数据如下表(具体数据从主页资源下载):年份时序(t)总额(yt)时序应该从0开始19891138.40019902174.00119913190.55219924196.10319935230.50419946237.10519957274.......
  • Python画笔案例-064 绘制彩花之旋转羽毛
    1、绘制彩花之旋转羽毛通过python的turtle库绘制彩花之旋转羽毛,如下图:2、实现代码 绘制彩花之旋转羽毛,以下为实现代码:"""彩花之旋转羽毛.py本程序需要coloradd模块支持,安装方法:pipinstallcoloradd技术支持微信scartch8,QQ:406273900www.lix......
  • python企业员工工作流引擎的研究 0f4m7
    目录python语言技术路线框架介绍具体实现截图技术栈和环境说明解决的思路性能/安全/负载方面核心代码部分展示详细视频演示源码获取方式python语言Python的扩展性也很好,其可以利用c语言编写模块,编译链接到解释器,从而使Python能够调用该c模块中的接口。反之,C语言也能......
  • 使用Conda配置python环境到Pycharm------Window小白版
    使用Conda配置python环境到Pycharm一、Conda安装和环境配置1.1安装Conda软件1.2判断是否安装成功1.3创建Conda虚拟环境二、pycharm的安装2.1Pycharm使用手册2.2安装pycharm三、pycharm导入Conda环境一、Conda安装和环境配置anaconda官网1.1安装Conda软......
  • AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【黑科技·鼓包】问了一个Python的问题。问题如下:我也遇到问题了..大佬们知道的帮忙解答下,很奇怪,不知道为什么nicegui库中input输入框的值不能用change改变的模式更改,但是可以选择直接赋值,我想让用户只能输入纯数字(不......