浅谈Python xlwings读取Excel文件的正确姿势

您所在的位置:网站首页 xlwings获取单元格位置 浅谈Python xlwings读取Excel文件的正确姿势

浅谈Python xlwings读取Excel文件的正确姿势

2024-05-22 10:50| 来源: 网络整理| 查看: 265

使用Python加载最新的Excel读取类库xlwings可以说是Excel数据处理的利器,但使用起来还是有一些注意事项,否则高大上的Python会跑的比老旧的VBA还要慢。

这里我们对比一下,用几种不同的方法,从一个Excel表格中读取一万行数据,然后计算结果,看看他们的耗时。

1. 处理要求:

一个Excel表格中包含了3万条记录,其中B,C两个列记录了某些计算值,读取前一万行记录,将这两个列的差值进行计算,然后汇总得出差的和。

文件是这个样子:Book300s.xlsx 。

2. 处理方式有以下3种,我们对比一下耗时的大小。 处理方式 代码名称 1. 使用Python的xlwings类库,读取Excel文件,然后采用Excel的Sheet和Range的引用方式读取并计算 XLS_READ_SHEET.py 2. 直接使用Excel自带的VBA语言进行计算 VBA 使用Python的xlwings类库,读取Excel文件,然后采用Python的自带数据类型List列表进行数据存储和计算

| XLS_READ_LIST.py

3. 首先测试第一种,XLS_READ_SHEET.py

使用Python的xlwings类库,读取Excel文件,然后引用Excel的Sheet和Range的方式来读取并计算

#coding=utf-8 import xlwings as xw import pandas as pd import time start_row = 2 # 处理Excel文件开始行 end_row = 10002 # 处理Excel结束行 #记录打开表单开始时间 start_open_time = time.time() #指定不显示地打开Excel,读取Excel文件 app = xw.App(visible=False, add_book=False) wb = app.books.open('D:/PYTHON/TEST_CODE/Book300s.xlsx') # 打开Excel文件 sheet = wb.sheets[0] # 选择第0个表单 #记录打开Excel表单结束时间 end_open_time = time.time() #记录开始循环计算时间 start_run = time.time() row_content = [] #读取Excel表单前10000行的数据,Python的in range是左闭右开的,到10002结束,但区间只包含2到10001这一万条 for row in range(start_row, end_row): row_str = str(row) #循环中引用Excel的sheet和range的对象,读取B列和C列的每一行的值,对比计算 start_value = sheet.range('B' + row_str).value end_value = sheet.range('C' + row_str).value if start_value Range("B" & i_count).Value Then offset_value = Range("C" & i_count).Value - Range("B" & i_count).Value total_offset_value = total_offset_value + offset_value End If Next i_count et = Time() Range("E2").Value = total_offset_value Range("E3").Value = et - st MsgBox "Result: " & total_offset_value & Chr(10) & "Running time: " & et - st End Sub

VBA处理计算结果如下:

保存了3万条数据的Excel文件是通过手工打开的,在电脑上大概花费了8.2秒的时间

处理Excel 前10000行数据花费了1.16秒的时间。

5.使用Python的xlwings类库,读取Excel文件,然后采用Python的自带数据类型List进行数据存储和计算,计算完成后再将结果写到Excel表格中

#coding=utf-8 import xlwings as xw import pandas as pd import time #记录打开表单开始时间 start_open_time = time.time() #指定不显示地打开Excel,读取Excel文件 app = xw.App(visible=False, add_book=False) wb = app.books.open('D:/PYTHON/TEST_CODE/Book300s.xlsx') # 打开Excel文件 sheet = wb.sheets[0] # 选择第0个表单 #记录打开Excel表单结束时间 end_open_time = time.time() #记录开始循环计算时间 start_run = time.time() row_content = [] #读取Excel表单前10000行的数据,并计算B列和C列的差值之和 list_value = sheet.range('A2:D10001').value for i in range(len(list_value)): #使用Python的类库直接访问Excel的表单是很缓慢的,不要在Python的循环中引用sheet等Excel表单的单元格, #而是要用List一次性读取Excel里的数据,在List内存中计算好了,然后返回结果 start_value = list_value[i][1] end_value = list_value[i][2] if start_value


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3