現(xiàn)有的表格長(zhǎng)這樣:
最后一欄的備注中的數(shù)字就是該員工應(yīng)得的福利的檔次。
這張表格說明了每個(gè)檔次的福利所包含的東西,1檔福利是500元標(biāo)準(zhǔn),2檔福利是300元標(biāo)準(zhǔn)……以此類推。最后單位領(lǐng)導(dǎo)想要的表格就是下面這樣的,這是我最后做出的成果的截圖,顯示了每個(gè)部門分別要買多少東西:
那么我是如何做到的呢?聽媳婦描述完情況之后,我第一反應(yīng)就是可以用Python來做這件事。事實(shí)證明,Python并沒有讓我失望。在這個(gè)過程中,我用到了兩個(gè)Python的模塊,一個(gè)是用來讀Excel文件的xlrd,另一個(gè)是用來向Excel文件中寫入數(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') #第一張表的sheet
sheet1 = workbook2.sheet_by_name('Sheet1') #第二張表的sheet
然后讀入第一個(gè)表中的部門和備注信息,每一條員工的所屬部門和備注組成一個(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是部門名,值是一個(gè)列表,列表中包含該部門所需的全部商品,假設(shè)需要兩袋大米,那么列表中就會(huì)有兩個(gè)“大米”。最終字典的內(nèi)容應(yīng)該類似這樣:
{'高層管理':['大米', '大米', '喜盛隆月餅'], '文化產(chǎn)業(yè)部':['茶葉', '茶葉', '五花老臘肉', '五花老臘肉']}
要做到這一點(diǎn),我們需要遍歷res
for i in res:
bumen = i[0] #獲取部門名
lipin_level = int(i[1]) #獲取該員工的福利檔次
if huizong.get(bumen) == None: #如果字典中不存在這個(gè)鍵值對(duì),就創(chuàng)建一個(gè)
huizong[bumen] = []
huizong[bumen].extend(lipin[lipin_level]) #在列表中添加對(duì)應(yīng)的禮品名
最后遍歷這個(gè)字典,把每個(gè)部門中的不同的商品數(shù)量通過list的count方法計(jì)算出來,將數(shù)據(jù)寫到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那些事」,做全棧開發(fā)工程師
聯(lián)系客服