|
現(xiàn)有的表格長(zhǎng)這樣:

最后一欄的備注中的數(shù)字就是該員工應(yīng)得的福利的檔次。

這張表格說(shuō)明了每個(gè)檔次的福利所包含的東西,1檔福利是500元標(biāo)準(zhǔn),2檔福利是300元標(biāo)準(zhǔn)……以此類(lèi)推。最后單位領(lǐng)導(dǎo)想要的表格就是下面這樣的,這是我最后做出的成果的截圖,顯示了每個(gè)部門(mén)分別要買(mǎi)多少東西:

那么我是如何做到的呢?聽(tīng)媳婦描述完情況之后,我第一反應(yīng)就是可以用Python來(lái)做這件事。事實(shí)證明,Python并沒(méi)有讓我失望。在這個(gè)過(guò)程中,我用到了兩個(gè)Python的模塊,一個(gè)是用來(lái)讀Excel文件的xlrd,另一個(gè)是用來(lái)向Excel文件中寫(xiě)入數(shù)據(jù)的xlsxwriter。 import xlrd import xlsxwriter
首先獲取兩個(gè)Excel文件對(duì)象: 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')
然后讀入第一個(gè)表中的部門(mén)和備注信息,每一條員工的所屬部門(mén)和備注組成一個(gè)元組。 cols_bumen = sheet3.col_values(2) cols_beizhu = sheet3.col_values(7)
res = list(zip(cols_bumen, cols_beizhu))
res = res[2:len(res)]
讀入第二個(gè)表中的禮品信息。 lipin = [[], ['喜盛隆月餅','胡姬花花生油','黃河口大閘蟹','大米','后腿老臘肉','五花老臘肉','醬醋精裝組合'], ['怡青源月餅8*100g','大米','醬醋精裝組合','胡姬花花生油','后腿老臘肉','茶葉','五花老臘肉'], ['怡青源月餅8*100g','大米','獼猴桃','龍大花生油','面粉'], ['怡青源月餅8*100g','大米','后腿老臘肉']]
lipin_list = ['五花老臘肉', '龍大花生油', '醬醋精裝組合', '大米', '獼猴桃', '怡青源月餅8*100g', '喜盛隆月餅', '后腿老臘肉', '黃河口大閘蟹', '茶葉', '胡姬花花生油', '面粉']
創(chuàng)建一個(gè)字典huizong,key是部門(mén)名,值是一個(gè)列表,列表中包含該部門(mén)所需的全部商品,假設(shè)需要兩袋大米,那么列表中就會(huì)有兩個(gè)“大米”。最終字典的內(nèi)容應(yīng)該類(lèi)似這樣: {'高層管理':['大米', '大米', '喜盛隆月餅'], '文化產(chǎn)業(yè)部':['茶葉', '茶葉', '五花老臘肉', '五花老臘肉']}
要做到這一點(diǎn),我們需要遍歷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])
最后遍歷這個(gè)字典,把每個(gè)部門(mén)中的不同的商品數(shù)量通過(guò)list的count方法計(jì)算出來(lái),將數(shù)據(jù)寫(xiě)到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()
(完)
看完本文有收獲?請(qǐng)轉(zhuǎn)發(fā)分享給更多人 關(guān)注「Python那些事」,做全棧開(kāi)發(fā)工程師
|