现有的表格长这样:

最后一栏的备注中的数字就是该员工应得的福利的档次。

这张表格说明了每个档次的福利所包含的东西,1档福利是500元标准,2档福利是300元标准……以此类推。最后单位领导想要的表格就是下面这样的,这是我最后做出的成果的截图,显示了每个部门分别要买多少东西:

那么我是如何做到的呢?听媳妇描述完情况之后,我第一反应就是可以用Python来做这件事。事实证明,Python并没有让我失望。在这个过程中,我用到了两个Python的模块,一个是用来读Excel文件的xlrd,另一个是用来向Excel文件中写入数据的xlsxwriter。 import xlrd import xlsxwriter
首先获取两个Excel文件对象: workbook1 = xlrd.open_workbook(r'details.xlsx') workbook2 = xlrd.open_workbook(r'plan.xlsx')
sheet3 = workbook1.sheet_by_name('Sheet3') sheet1 = workbook2.sheet_by_name('Sheet1')
然后读入第一个表中的部门和备注信息,每一条员工的所属部门和备注组成一个元组。 cols_bumen = sheet3.col_values(2) cols_beizhu = sheet3.col_values(7)
res = list(zip(cols_bumen, cols_beizhu))
res = res[2:len(res)]
读入第二个表中的礼品信息。 lipin = [[], ['喜盛隆月饼','胡姬花花生油','黄河口大闸蟹','大米','后腿老腊肉','五花老腊肉','酱醋精装组合'], ['怡青源月饼8*100g','大米','酱醋精装组合','胡姬花花生油','后腿老腊肉','茶叶','五花老腊肉'], ['怡青源月饼8*100g','大米','猕猴桃','龙大花生油','面粉'], ['怡青源月饼8*100g','大米','后腿老腊肉']]
lipin_list = ['五花老腊肉', '龙大花生油', '酱醋精装组合', '大米', '猕猴桃', '怡青源月饼8*100g', '喜盛隆月饼', '后腿老腊肉', '黄河口大闸蟹', '茶叶', '胡姬花花生油', '面粉']
创建一个字典huizong,key是部门名,值是一个列表,列表中包含该部门所需的全部商品,假设需要两袋大米,那么列表中就会有两个“大米”。最终字典的内容应该类似这样: {'高层管理':['大米', '大米', '喜盛隆月饼'], '文化产业部':['茶叶', '茶叶', '五花老腊肉', '五花老腊肉']}
要做到这一点,我们需要遍历res for i in res: bumen = i[0] lipin_level = int(i[1]) if huizong.get(bumen) == None: huizong[bumen] = [] huizong[bumen].extend(lipin[lipin_level])
最后遍历这个字典,把每个部门中的不同的商品数量通过list的count方法计算出来,将数据写到Excel表中,就大功告成了。
完整代码如下: import xlrd import xlwt import xlsxwriter
workbook1 = xlrd.open_workbook(r'details.xlsx') workbook2 = xlrd.open_workbook(r'plan.xlsx')
sheet3 = workbook1.sheet_by_name('Sheet3') sheet1 = workbook2.sheet_by_name('Sheet1')
linpin = sheet1.col_values(1) lipin = [[], ['喜盛隆月饼','胡姬花花生油','黄河口大闸蟹','大米','后腿老腊肉','五花老腊肉','酱醋精装组合'], ['怡青源月饼8*100g','大米','酱醋精装组合','胡姬花花生油','后腿老腊肉','茶叶','五花老腊肉'], ['怡青源月饼8*100g','大米','猕猴桃','龙大花生油','面粉'], ['怡青源月饼8*100g','大米','后腿老腊肉']]
lipin_list = ['五花老腊肉', '龙大花生油', '酱醋精装组合', '大米', '猕猴桃', '怡青源月饼8*100g', '喜盛隆月饼', '后腿老腊肉', '黄河口大闸蟹', '茶叶', '胡姬花花生油', '面粉']
cols_bumen = sheet3.col_values(2) cols_beizhu = sheet3.col_values(7)
res = list(zip(cols_bumen, cols_beizhu))
res = res[2:len(res)]
huizong = {'高层管理':[]}
for i in res: bumen = i[0] lipin_level = int(i[1]) if huizong.get(bumen) == None: huizong[bumen] = [] huizong[bumen].extend(lipin[lipin_level])
result = xlsxwriter.Workbook('result.xlsx') worksheet = result.add_worksheet() for i in range(0, len(lipin_list)): worksheet.write(chr(66 + i) + '1', str(lipin_list[i]))
bumen = [] for i in res: if bumen.count(i[0]) == 0: bumen.append(i[0])
for i in range(0, len(bumen)): worksheet.write('A{0}'.format(2+i), str(bumen[i]))
alphaBet = 66 number = 2 j = 0 for key in huizong: count = 0 for i in range(0, len(lipin_list)): count = huizong[key].count(lipin_list[i]) worksheet.write('{0}{1}'.format(chr(alphaBet+i), number+j), count) j += 1
result.close()
(完)
看完本文有收获?请转发分享给更多人 关注「Python那些事」,做全栈开发工程师
|