目录
使用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