|
原文件行数太多,要组合的结果太多,运行时间太长,我保留了3行,有1000种组合,其中97种组合满足要求
- import xlwings as xw
- # 打开excel程序, visible 是否可见, add_book 是否添加新工作簿
- app = xw.App(visible=False, add_book=False)
- # 关闭excel程序的警告
- app.display_alerts = False
- # 关闭屏幕刷新 提高运行速度
- app.screen_updating = False
- try:
- # 打开工作簿
- wb = app.books.open('./project_3/data.xlsx', update_links=False)
- # 选定工作表
- sh = wb.sheets['sheet1']
-
- # 确定最大行数
- max_row = sh.used_range.last_cell.row
- # 确定最大列数
- max_column = sh.used_range.last_cell.column
-
- count = 0
-
- def funny(r, path_v = [], path = []):
-
- # 声明全局变量
- global count
- # 当统计行数超过最大时,终止组合开始求和
- if r > max_row:
- sum_list = sum(path_v)
- # 如果除以10的余数为0,则尾数为0
- if sum_list % 10 == 0:
- count += 1
- print(path,path_v,'这是第 '+str(count)+' 种组合')
- else:
- # 遍历当前行中的所有列
- for c in range(1, max_column+1):
- # 将单元格地址和值加到列表里
- cell = sh.range(r,c)
- path.append(cell.address)
- path_v.append(cell.value)
- # 将一个遍历结果返还到函数中,开始下一轮组合
- funny(r+1, path_v.copy(), path.copy())
- # 清理掉这次添加的遍历结果,防止其它遍历结果混在列表中
- path.pop()
- path_v.pop()
- funny(1)
- finally:
- # 关闭工作簿
- if 'wb' in locals():
- wb.close()
- # 退出程序
- app.quit()
复制代码
|
|