打印工資條怎么做到每個人都有表頭明細_朋友說:能不能用python,幫我寫一個“制作工資條”的自動化程序?...

本文說明

今天和一個朋友吃飯,她說我經常使用Excel制作工資條,但是每個月都要做一遍,你能不能用python寫一個代碼,能夠自動化完成這個工作。這當然可以啦,就是這么牛逼!

e5936adfa23d8db2eda6166b189e66c7.png

我們先來看看原始數據是什么樣子的。

5c052d8da7fb7163aa2beb0fd89f901a.png

那么最后做成的效果是什么樣子的呢?

db903cac939ff3861bf3db7de3ed04b3.png

這就很方便了,不管你公司有多少人,只要你把原始數據丟給我,我都可以秒出一個工資條,省得每次都需要使用Excel操作一遍,并且數據多了Excel還會卡頓。

代碼邏輯剖析

那么這樣一個程序,是怎么寫的呢?

其實只要是邏輯想清楚了,剩下的就是寫代碼的事兒了。下面我就帶著大家梳理一下,這段代碼的邏輯。

首先,我們應該是讀取Excel表格。然后需要拷貝其中一個sheet表到另外一張sheet表,并給sheet命名。這樣做的目的:為了存放制作好工資條的那張sheet表。

import re
import openpyxl
from copy import copywb = openpyxl.load_workbook('工資條.xlsx')
# copy_worksheet():拷貝sheet表 
wb.copy_worksheet(wb['工資條'])
# worksheets:以列表的形式返回所有的Worksheet(表格)
ws = wb.worksheets[-1]
ws.title = 'final_工資條'

可能這樣說的話,大家還是不知道上述代碼每一行,到底是什么意思,我下面截一張圖給大家,其實就可以很好的說明上述函數的含義了。

f4db21a1270e03e02f7ea6c5031c88b6.png

接著,就是給每一行數據前面添加一個表頭。由于后面每一行表頭的樣式,都與第一行完全一模一樣的,因此我們需要復制第一行表頭中的樣式。

def cell_style(cell):alignment = copy(cell.alignment)    # 對齊樣式border = copy(cell.border)          # 邊框樣式fill = copy(cell.fill)              # 填充樣式font = copy(cell.font)              # 字體樣式return alignment, border, fill, font# 獲取標題行中,每個單元格中的各種樣式
alignment, border, fill, font = cell_style(cell=cells_rows[0][0])

從上面的代碼中可以看到:我定義了一個函數,我們直接使用copy庫中的copy()方法,直接拷貝單元格的4大樣式。因為原表第一行中每個單元格的4大樣式,都是完全一致的,因此我們直接獲取第一個單元格的樣式即可。

最后這一part是整個代碼中最精彩的部分,不太好敘述,大家仔細研究一下下方的注釋。

for i, _ in enumerate(cells_rows[1:]):if i > 0:index = i*3# 每循環一次,就在對應位置下方插入2行。1行是空行,1行是表頭行。ws.insert_rows(idx=index, amount=2)# 因為每次插入2行,所以需要在表頭行那里,將表頭及其樣式寫入。for j, v in enumerate(header):r, c = index+1, j+1cell = ws.cell(row=r, column=c)cell.value = vcell.alignment = alignmentcell.font = fontcell.border = bordercell.fill = fill# 更新后面的公式if cell.coordinate[:1] in ('H', 'J'):cell = ws.cell(row=r+1, column=c)cell.value = re.sub('d+', str(r+1), cell.value)

這里需要特別說明一點的就是更新公式。就拿第一次循環來說,我們在第3行的位置,插入了2個空白行。那么原本第3行的數據,此時就被擠到了第5行。

但是需要注意的是,它是被迫擠到第5行的,所以這一整行是原封不動搬到第5行的,包括它原來的公式。原來在第3行的時候,如果公式是SUM(E3:G3),被擠到到了第5行后,應該是SUM(E5:G5),但是它仍然是SUM(E3:G3),所以需要我們修改,上述代碼中正是使用正則將這個數字3改為了5。

完整代碼

import re
import openpyxl
from copy import copydef cell_style(cell):alignment = copy(cell.alignment)    # 對齊樣式border = copy(cell.border)          # 邊框樣式fill = copy(cell.fill)              # 填充樣式font = copy(cell.font)              # 字體樣式return alignment, border, fill, fontwb = openpyxl.load_workbook('工資條.xlsx') 
wb.copy_worksheet(wb['工資條'])
ws = wb.worksheets[-1]
ws.title = 'final_工資條'# 獲取每一列的值,拼接在一個列表中
cells_rows = [[cell for cell in row] for row in ws.rows]# 獲取標題
header = [cell.value for cell in cells_rows[0]]# 獲取標題行中,每個單元格中的各種樣式
alignment, border, fill, font = cell_style(cell=cells_rows[0][0])for i, _ in enumerate(cells_rows[1:]):if i > 0:index = i*3# 每讀取一行,就在下方插入兩行ws.insert_rows(idx=index, amount=2)# 寫表頭for j, v in enumerate(header):r, c = index+1, j+1cell = ws.cell(row=r, column=c)cell.value = vcell.alignment = alignmentcell.font = fontcell.border = bordercell.fill = fill# 更新后面的公式if cell.coordinate[:1] in ('H', 'J'):cell = ws.cell(row=r+1, column=c)cell.value = re.sub('d+', str(r+1), cell.value)
# 整個代碼寫完后,一定要記得保存               
wb.save('工資條.xlsx')    

b6dc654989a5ca17a9c2fb4788bd9f0f.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537288.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537288.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537288.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自定義按鈕 圖片標題位置隨意放置

自定義按鈕UIControl 寫在前面 #圖標和文字在一起是開發難免的問題,系統的按鈕默認是圖片居左的文字居右的, 且圖片和文字的距離不好調整,圖片的位置更是讓人頭疼, 故在閑暇之余封裝了一個控件。 復制代碼所用到知識的 # 1、蘋果系…

做優化的數據庫工程師請參考!CynosDB的計算層設計優化揭秘

本文由云社區發表本文作者:孫旭,騰訊數據庫開發工程師,9年數據庫內核開發經驗;熟悉數據庫查詢處理,并發控制,日志以及存儲系統;熟悉PostgreSQL(Greenplum,PGXC等&#xf…

netty發送數據_看完這篇還不清楚Netty的內存管理,那我就哭了

說明在學習Netty的時候,ByteBuf隨處可見,但是如何高效分配ByteBuf還是很復雜的,Netty的池化內存分配這塊還是比較難的,很多人學習過,看過但是還是云里霧里的,本篇文章就是主要來講解:Netty分配池…

數字化改革體系架構“152”兩次迭代升級為“1612”

數字化改革體系架構已經完成兩次迭代,152-1512-1612。 2021年,浙江在全國率先啟動一項關系全局、影響深遠、制勝未來的重大集成改革——數字化改革,并確定為全面深化改革的總抓手。 2021年2月18日,數字化改革大會“152”工作體系…

微軟希望每個人有自己的人工智能朋友

微軟正在和其他公司那樣投資和研發人工智能技術,同時微軟也希望人工智能技術能夠深入我們的日常生活。 為此微軟正在申請新的專利技術希望每個人在社交網絡上都有自己的人工智能朋友可以隨時隨地的溝通交流。 實際上該專利屬于已經實踐的內容再來申請專利技術的&…

python 40位的數減個位數_Python數據分析入門教程(五):數據運算

作者 | CDA數據分析師進行到這一步就可以算是開始正式的烹飪了,在這部分之前的數據操作部分我們列舉了一些不同維度的分析指標,這一章我們主要看看這些指標都是怎么計算出來的。一、算術運算算術運算就是基本的加減乘除,在Excel或者Python中數…

數字化改革“152”體系詳解

架構圖 “1” 即一體化智能化公共數據平臺(平臺大腦),按照“統一規劃、統一支撐、統一架構、統一平臺、統一標準、統一建設、統一管理、統一運維"的要求,建設省市縣三級公共數據平臺,疊加三級“大腦功能&#xf…

數字化改革“141”體系

縣級以上是“152”大框架,縣以下是“141”體系。 141體系是:縣級社會治理中心、鄉鎮(街道)基層治理“四個平臺”、村社網格。 “1” 第一個“1”指縣級社會治理中心。 “4” 第二個“4”指鄉鎮(街道)基…

spring boot——MockMvc的用法

1.pom配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId> </dependency> 2.所需對象及Controller public class User {private String id;private String username;private…

python一元加號_Python一元方程解算系統(需要Sympy庫支持)

解算案例本文為實現python一元方程解算的源碼案例(后續不定期更新)# -*- coding: UTF-8 -*-from sympy import *#設置一些可能拋出的異常def Warn(type):if type "missEquater":print "You missed the euqater!"elif type "excessiveEquater":…

接口做的好怎么形容_淘寶直播預告怎么做才合格?如何做好?

很多淘寶商家在直播前沒有做淘寶直播預告&#xff0c;或者不知道怎么去做直播預告&#xff0c;這對直播的效果會有很大的影響&#xff0c;那么直播前如何做好直播預告呢?怎樣的直播預告才是合格的&#xff0c;下面來了解一下。1.必須去淘寶直播中控臺發布。因為手機上發布目前…

“1+7+N”改革工作體系介紹

2021年&#xff0c;浙江省確定了“17N”的改革工作體系&#xff0c;要求以全面深化改革新成效再創體制機制新優勢。&#xff08;2022年已經升級為“1612N”&#xff0c;點擊閱讀&#xff09; “1” 數字化改革&#xff0c;這是浙江全面深化改革的總抓手。將聚焦打造全球數字變…

傻傻分不清的javascript運行機制

學習到javascript的運行機制時&#xff0c;有幾個概念經常出現在各種文章中且容易混淆。Execution Context(執行環境或執行上下文)&#xff0c;Context Stack (執行棧)&#xff0c;Variable Object(VO: 變量對象)&#xff0c;Active Object(AO: 活動對象)&#xff0c;LexicalEn…

浙江省數字化改革回顧(2022年5月)

事業的偉大在于目標的壯麗&#xff0c;也在于過程的壯麗&#xff1b;改革的成果在于享有的豐富&#xff0c;也在于經歷的豐富。2021年2月18日&#xff0c;春節假期后首個工作日&#xff0c;浙江省委召開全省數字化改革大會&#xff0c;在全國率先開啟數字化改革探索實踐。此后&…

python 某個數是不是在某個范圍內_教寫一個簡單的python小程序(04)

點擊藍字關注我們 會酸的柚子Python愛好者搞機少年七夕結束了~酸柚也是被強塞了滿嘴的狗糧在這樣充滿戀愛腐朽氣息的一天酸柚也是馬不停蹄的在趕稿子兄弟們&#xff0c;給我頂起來呀~我們來看看今日的題目可能很多小伙伴對完全平方數這個概念有點生疏了完全平方數數學上&#x…

Python:模塊module

python中一個模塊就是一個擴展名為.py的文件&#xff0c;也可能是預編譯的.pyc文件。 引入模塊用&#xff1a;import 模塊名 使用引用模塊中定義的標識符&#xff08;函數、變量、類&#xff09;用&#xff1a;模塊名.標識符名 引入模塊中的標識符用&#xff1a;from 模塊名 im…

浙江公布2022年數字化改革“最系列“成果 評選出最佳應用104項

10月29日&#xff0c;省委改革辦&#xff08;省數改辦&#xff09;公布了2022年數字化改革“最系列”成果。該評選由省委改革辦&#xff08;省數改辦&#xff09;會同省委政研室、省人大常委會法工委、省市場監管局和省大數據局共同開展&#xff0c;評選了最佳應用104項、最強大…

dot net core 使用 IPC 進程通信

原文:dot net core 使用 IPC 進程通信版權聲明&#xff1a;博客已遷移到 http://lindexi.gitee.io 歡迎訪問。如果當前博客圖片看不到&#xff0c;請到 http://lindexi.gitee.io 訪問博客。本文地址 https://blog.csdn.net/lindexi_gd/article/details/79946496 dot net core 使…

python可變類型和不可變深淺拷貝類型_python3筆記十四:python可變與不可變數據類型+深淺拷貝...

一&#xff1a;學習內容python3中六種數據類型python賦值python淺拷貝python深拷貝二&#xff1a;python3六種數據類型1.六種數據類型Number(數字)string(字符串)List(列表)Tuple(元祖)Set(集合)Dictionary(字典)2.六種數據類型分類不可變數據(3個)&#xff1a;Number、String、…

Android手機用wifi連接adb調試的方法

https://www.jianshu.com/p/dc6898380e38 0x0 前言 Android開發肯定要連接pc的adb進行調試&#xff0c;傳統的方法是用usb與pc進行連接&#xff0c;操作簡單即插即用&#xff0c;缺點是pc上必須得有對應手機的usb驅動程序&#xff0c;對于谷歌親兒子系列和三星摩托等外國品牌而…