怎么精简和优化呢?这个小破程序运行一次五分钟不够
史上最土最笨最丑的程序出来了!全是for循环和if判断,全是读写磁盘操作,哈哈哈哈,不过,总算解决了工作中的一个实际问题。希望大神们能提供优化和精简思路,资料在毒盘里import xlwings as xw
file=r'D:\MyData\MyDesk\Test1005.xlsx'
app=xw.App(visible=False,add_book=False)
wb=app.books.open(file)
nwb=app.books.add()
nws1 = nwb.sheets.add('情报板完好率')
nws2 = nwb.sheets.add('镜头完好率')
for ws in wb.sheets:
for i in range(2,ws['a2'].expand('down').shape+1):
qrows = nws1['a1'].expand().shape-1
jrows = nws2['a1'].expand().shape-1
cn = []
if ws.name == '情报板':
rng = ws['b' + str(i)].expand('right')
cns = .value != rng.value]
if ((len(cns) == 0) and (rng.value == '正常')):
continue
if ((len(cns) == 0) and (rng[-1].value != '正常')):
nws1.range(i, 1).value = ws.range(i, 1).value
nws1.range(i, 2).value = ws.range(1, 1).value
nws1.range(i, 3).value = ws.range(1, 2).value
nws1.range(i, 4).value = ws.range(1, 32).value
cns =
if rng.value == "正常":
for j in range(0, len(cns), 2):
if len(cns) % 2 == 0:
cn.append(, cns])
else:
cns = cns +
cn.append(, cns])
for k in range(len(cn)):
nws1.range(2+k+qrows,1).value = ws.range(i,1).value
nws1.range(2+k+qrows,2).value = ws.range(1,cn).value
nws1.range(2+k+qrows,3).value = ws.range(1,cn).value
nws1.range(2+k+qrows,4).value = ws.range(1,cn).value
else:
for j in range(0, len(cns), 2):
if len(cns) % 2 == 0:
cn.append(, cns])
else:
cns = +cns
cn.append(, cns])
for k in range(len(cn)):
nws1.range(2+k+qrows,1).value=ws.range(i,1).value
nws1.range(2+k+qrows,2).value=ws.range(1,cn).value
nws1.range(2+k+qrows,3).value=ws.range(1,cn).value
nws1.range(2+k+qrows,4).value=ws.range(1,cn).value
if ws.name == '镜头':
rng = ws['b' + str(i)].expand('right')
cns = .value != rng.value]
if ((len(cns) == 0) and (rng.value == '正常')):
continue
if ((len(cns) == 0) and (rng[-1].value != '正常')):
nws2.range(i, 1).value = ws.range(i, 1).value
nws2.range(i, 2).value = ws.range(1, 1).value
nws2.range(i, 3).value = ws.range(1, 2).value
nws2.range(i, 4).value = ws.range(1, 32).value
cns =
if rng.value == "正常":
for j in range(0, len(cns), 2):
if len(cns) % 2 == 0:
cn.append(, cns])
else:
cns = cns +
cn.append(, cns])
for k in range(len(cn)):
nws2.range(2 + k + jrows, 1).value = ws.range(i, 1).value
nws2.range(2 + k + jrows, 2).value = ws.range(1, cn).value
nws2.range(2 + k + jrows, 3).value = ws.range(1, cn).value
nws2.range(2 + k + jrows, 4).value = ws.range(1, cn).value
else:
for j in range(0, len(cns), 2):
if len(cns) % 2 == 0:
cn.append(, cns])
else:
cns = + cns
cn.append(, cns])
for k in range(len(cn)):
nws2.range(2 + k + jrows, 1).value = ws.range(i, 1).value
nws2.range(2 + k + jrows, 2).value = ws.range(1, cn).value
nws2.range(2 + k + jrows, 3).value = ws.range(1, cn).value
nws2.range(2 + k + jrows, 4).value = ws.range(1, cn).value
nwb.save(r'D:\MyData\MyDesk\Test1006.xlsx')
wb.close()
nwb.close()
app.quit()
https://pan.baidu.com/s/1rP5uxp6UDWjRksPo1tEvTQ
提取码:jijo
全月60+个Excel表格,每个表600个设备,先是整理汇总到一个表里,然后提取“故障”日期和修复日期,并计算差值。 本帖最后由 oldy 于 2020-10-8 11:29 编辑
同问: “最多就是改成函数式编程,减少代码复用,不过可读性就变差了。”脑细胞不够用啊,支持一下{:1_921:} 和我最开始写代码一样,for循环套娃,一层套一层哈哈哈 就这?还需要怎样简化?我觉得就这样挺好的。最多就是改成函数式编程,减少代码复用,不过可读性就变差了。 沉默之剑 发表于 2020-10-7 23:14
就这?还需要怎样简化?我觉得就这样挺好的。最多就是改成函数式编程,减少代码复用,不过可读性就变差了。
啥叫“函数式编程”? Menguy 发表于 2020-10-7 23:55
可以尝试使用多进程或者多线程,做成自定义函数,一个线程处理一个文件或者一个线程处理一组数据
说说怎么弄多线程或者多进程啊?没学过。自定义函数倒是知道,可不会用。 我寻思也没找着Test1005.xlsx啊,我看你是拿vba为难macos 用openpyxl 天黑我隐身 发表于 2020-10-8 13:50
我寻思也没找着Test1005.xlsx啊,我看你是拿vba为难macos
我忘了把数据文件放里面了,光把原始文件放里面了{:1_909:}
页:
[1]
2