需求描述
需求来自同事要做表格汇总,N个人需要每日填写各自更新的内容到一个表格中到不同位置,同事最初都是在手动操作,费时还容易出错。
办公自动化实现
其实做好规则,这个任务自动化实现起来并不难,我最初估计也就十几行代码到事。要求每人复制一下总表,命名add自己到名字,每人每日更新到自己到表格中,把所有人表格放到一个文件夹下(文件夹与主程序同级),遍历读出对应位置到内容,再写到总表到对应位置即可。当然,每个人的内容位置需要提前确定,或者有规律每日比前一日增加一列。本文示例代码只写了固定位置,如有其它实际应用场景是不固定的,只要找好规律做个变量即可。
代码
代码不算难,主要两个库,一个自带的os用于列出每个文件,一个openpyxl操作excel,具体细节我不展开了,可以为有相似需求的同学做个参考,注意路径修改成自己的。懂的都懂,不懂的欢迎讨论,上代码:
import os
import openpyxl
path = './xls/'
files = os.listdir(path)
summary_xls = './summary_0.xlsx'
# 用集合映射不同文件需要copy的内容的不同位置
loc = {
'test1':[6,12,31,35],
'test2':[12,13,31,35],
'test3':[15,17,31,35],
'test4':[17,18,31,35]
}
book_summary = openpyxl.load_workbook(summary_xls)
sheet_summary = book_summary.active
for file in files:
for key in loc.keys():
if key in file:
r1 = loc[key][0]
r2 = loc[key][1]
c1 = loc[key][2]
c2 = loc[key][3]
workbook = openpyxl.load_workbook(path+file)
sheet = workbook.active
row_data = [sheet.cell(row=i, column=j).value for i in range (r1,r2) for j in range (c1,c2)]
diff = c2-c1
for i, value in enumerate(row_data):
sheet_summary.cell(row=i//diff+r1, column=i%diff+c1).value = value
# book_summary.save(summary_xls)
book_summary.save('./summary_1.xlsx')