因为工作关系,常需要分析成员每周工作情况。如果靠人工统计,费力又耗时,想到何不利用python自动化来完成这样的工作
主要思路就是,通过python从原始数据中,统计出一周内每个人在各种事件中耗费的时间,保持到一个sheet中
首先需要用到python里面几个操作excel的库
from openpyxl.workbook import Workbook
#ExcelWriter,里面封装好了对Excel的写操作
from openpyxl.writer.excel import ExcelWriter
from openpyxl.reader.excel import load_workbook
并加载解析输入参数的库
from optparse import OptionParser
接下来,先解析输入参数,获得要操作的文件路径
usage = 'Usage: %prog file'
parser = OptionParser(usage)
(options, args) = parser.parse_args()
path = args[0]
然后,通过load_workbook打开excel文档
wb=load_workbook(path)
接着,创建新的sheet,并从原有sheet中获得原始数据
whs_sheet = wb.create_sheet(title='whs')
data_sheet = wb.get_sheet_by_name("owssvr")
下面就开始计算原始数据的最大行列数和新建sheet的最大行列数
MaxRow = data_sheet.max_row
MaxColumn = data_sheet.max_column
MaxWhsRow = len(NameList)
MaxWhsColumn = len(WhsList)
再创建一个二维数组,对应人名和事件的映射
WhsArry = [[0 for i in range(MaxWhsColumn-1)]for i in range(MaxWhsRow)]
接下来,就是通过几个循环,来将数据统计好并写入到新建的sheet中
for name in NameList:
for Row in range(2, MaxRow+1):
if name.split('.', 1)[0] == data_sheet.cell(row=Row, column=2).value.split(' ', 1)[0]:
whs = data_sheet.cell(row=Row, column=8).value
hous = data_sheet.cell(row=Row, column=6).value
WhsArry[NameList.index(name)][WhsList.index(whs)-1] = WhsArry[NameList.index(name)][WhsList.index(whs)-1] + hous
for Row in range(2, MaxWhsRow+2):
for Column in range(2, MaxWhsColumn+1):
if Column == MaxWhsColumn:
for count in range(2, MaxWhsColumn+1):
CellFrom = 'B'+str(Row)
CellTo = 'H'+str(Row)
whs_sheet.cell(row=Row, column=Column).value = '=SUM('+CellFrom+':'+CellTo+')'
else:
whs_sheet.cell(row=Row, column=Column).value = WhsArry[Row-2][Column-2]
最后,通过save将对文档的修改保存下来
wb.save(path)