鱼C论坛

 找回密码
 立即注册
查看: 1786|回复: 3

PYTHON操控EXCEL效率低下,求高手指教

[复制链接]
发表于 2020-9-6 22:47:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位大神,我在通过com操作excel的时候,发现同样的计算逻辑,PYthon需要极为漫长的时间方能给出结论(大概20秒,优化一下也顶多到9秒),可是用vba,同样的编程逻辑,却只需要不到1秒,甚至我还没有进一步优化。代码如下:
from win32com.client import Dispatch
xlapp=Dispatch("excel.application")
dic={}#建立一个字典,用来保存对应产品的加工费清单
wb=xlapp.workbooks("2020年公司加工费索赔表(正式版)")
sheets=wb.worksheets
for sheet in sheets:
    sheet_name=sheet.name
    sheet_cells=sheet.cells
    if sheet_name!="2019年加工费拟定":  #“2019年加工费拟定”这个表是汇总表,没有我需要的东西,特此不在本程序的考虑范围内,不需要参与统计
        if sheet_name not in dic:  #判断该子表的名称(也就是物料编号,每个子表都已经用物料编号来命名)是否已经存在字典里
            dic[sheet_name]={}#在字典里面插入关键字(物料编号),并绑定一个新的子字典,用来存放该物料号下各个工序(工序名称作为子字典的关键字),以及工序对应的价格
            lbound=sheet.usedrange.rows.count#判定工序终止的行数
            ubound=sheet_cells.find("工序").row#查找工序开始的具体行数(列数已经知道是第二列)
            for i in range(ubound,lbound):#用循环从工序开始的行数,一直到终止的行数
                if sheet_cells(i,2).value not in dic[sheet_name]:
                    dic[sheet_name][sheet_cells(i,2).value]=sheet_cells(i,7).value#在子字典(产品编号)里面插入工序作为关键字,对应的第七列的同行数据就是工序对应的加工费
print(dic)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-6 22:56:54 | 显示全部楼层
数据处理比较好的使用pandas吧,可以试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-7 00:04:50 | 显示全部楼层
我听说过pandas处理数据挺厉害,但是我觉得我不能光靠PANDAS,毕竟我经常需要操控OFFICE的对象和属性方法,pandas不能支持这些对象与方法的重复性(或者说循环)操作吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-7 00:43:51 | 显示全部楼层
额..额... 发表于 2020-9-7 00:04
我听说过pandas处理数据挺厉害,但是我觉得我不能光靠PANDAS,毕竟我经常需要操控OFFICE的对象和属性方法, ...

pandas处理数据,输出,然后openpyxl设置excel格式,差不多了吧,能应该大部分操作了
你觉得慢,主要还是在处理数据上,pandas处理起来还是蛮方便蛮快的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 20:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表