|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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)
|
|