小編寫這篇文章的一個主要目的,主要是用來給大家繼續講解關于python的一些實例,比如綜合運用Python+SeaTable,運用這個技能,可以實現相關的一些計算技能。比如可以實現連續性的計算兩個工作日天數,下面給大家詳細解答下。
當我們計算兩個日期間的間隔天數時,通常是用結束日期減去開始日期,但在實際的項目管理、任務管理、工作計劃等場景中,某些時間段會涉及雙休日、法定節假日,甚至還有公司自定義的工作時間安排,所以就需要計算出兩個日期間的實際工作日天數。比如一個表格中有多條任務,每條任務都有各自的開始日期、計劃結束日期或實際結束日期,那么如何自動計算出兩個日期間的實際工作日天數,以便做到精細和量化呢。
此時,萬能的Python就可以出場了,而用Python+SeaTable來實現則會更加方便工作管理。本文重點分享思路和代碼,僅供參考。
SeaTable表格有豐富的數據類型,如日期、單選、協作人、公式、按鈕等等,可以方便又規范地管理各類信息。此外,還有很多基礎功能和擴展功能,這其中就包括腳本功能。在表格上點擊“腳本”按鈕,可以導入或新建多個腳本,隨時一鍵運行即可(如需設置定期運行等可在“自動化規則”中實現)。
比如在下面這個表格中,開始時間由項目管理者填寫;結束時間由每個任務負責人在完成項目時填寫;工作日(天數)則根據開始時間和結束時間,運行Python腳本計算得出。
在SeaTable表格上新建Python腳本
具體來看。首先,我們打開腳本功能,選擇“新建腳本”,選擇Python。
思路
在打開的界面中,就可以對腳本進行編寫了。
在此處計算工作日的腳本編寫過程中需要注意幾個問題,以中國為例:
來年的工作日、休息日,暫不支持(因國家暫未發布安排)。
需要定義平日中休息的日期,即周一到周五哪天休息。
需要定義周末中工作的日期,即周六、周日哪天調休。
代碼
把以上的特殊日期一一列出來,這個腳本就不難編寫了,以下給出一些腳本片段,以2022年為例。
import datetime from enum import Enum from seatable_api import dateutils,Base,context #一個Base的授權信息 SERVER_URL=context.server_url or'https://cloud.seatable.cn' API_TOKEN=context.api_token or'dd46f9ca0172a850a0922107a6b2e6b99932b040' #1.定義中國的節假日概況 class Holiday(Enum): new_years_day="元旦" spring_festival="春節" tomb_sweeping_day="清明" labour_day="勞動節" dragon_boat_festival="端午" national_day="國慶節" mid_autumn_festival="中秋" #2.列出節假日列表,此處可以去查詢日歷,就不一一列出了 holidays={ datetime.date(year=2022,month=1,day=1):Holiday.new_years_day.value, datetime.date(year=2022,month=1,day=2):Holiday.new_years_day.value, datetime.date(year=2022,month=1,day=3):Holiday.new_years_day.value, datetime.date(year=2022,month=1,day=31):Holiday.spring_festival.value, datetime.date(year=2022,month=2,day=1):Holiday.spring_festival.value, ..... } #3.列出調休日的列表,及周六日為工作日的列表 workdays={ datetime.date(year=2022,month=1,day=29):Holiday.spring_festival.value, datetime.date(year=2022,month=1,day=30):Holiday.spring_festival.value, datetime.date(year=2022,month=4,day=2):Holiday.tomb_sweeping_day.value, datetime.date(year=2022,month=4,day=24):Holiday.labour_day.value, datetime.date(year=2022,month=5,day=7):Holiday.labour_day.value, datetime.date(year=2022,month=10,day=8):Holiday.national_day.value, datetime.date(year=2022,month=10,day=9):Holiday.national_day.value, .... } #4.定義是否是工作日 def is_workday(date): ''' 工作日定義: 1.日期在workdays字典的key中 2.星期是周一到周五且不在holidays字典的key中 ''' date=_validate_date(date) weekday=date.weekday() return bool(date in workdays.keys()or(weekday<=4 and date not in holidays.keys())) #5.計算兩個日期之間的工作日,此處返回的是工作日的列表,該列表的長度即是工作日的天數 def get_workdays(start,end): """ 獲取兩個日期之間的工作日,返回datetime的列表 """ start,end=_validate_date(start,end) return list(filter(is_workday,get_dates(start,end))) #6.將結果寫入SeaTable def calculate_base_workdays(base,table_name): ''' 通過seatable表格中的,開始日期,結束日期,計算兩個日期間工作日的天數,并把其更新到該行的 工作日字段中 ''' for row in base.list_rows(table_name): row_id=row.get('_id') start_date=row.get("開始日期") end_date=row.get("結束日期") if not(start_date and end_date): continue try: work_day_list=get_workdays(start_date,end_date) #兩個日期間的工作日天數 work_day_counts=len(work_day_list) cell_value=row.get("工作日") if cell_value==work_day_counts: continue base.update_row( table_name, row_id, { "工作日":work_day_counts } ) except Exception as e: print("start date:%s,end date:%s,error:%s"%(start_date,end_date,e)) continue base=Base(API_TOKEN,SERVER_URL) base.auth() calculate_base_workdays(base,"工作任務安排")
總結
SeaTable作為一款以在線協同表格為基礎的新型數字化平臺,功能豐富,使用靈活,能幫我們實現一體化數據管理和處理。當我們需要快速地開發自定義數據處理流程時,就可以使用它完善的Python API功能,能節省很多成本。具體到本案例中,除了使用Python來計算兩個日期間的工作日外,還可以使用表格的日歷插件、時間線插件、高級統計插件來進行查看和做可視化圖表分析,讓項目管理更方便,實現應用更簡單。
到此為止,這篇文章就給大家解答完畢了,希望可以給大家帶來更多幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/128285.html
摘要:緣起這幾日閑來無事擼代碼,無意中發現一樁趣事。原以為是一個的,沒想到經過一系列死磕,挖掘出了一段和中國歷史乃至人類文明相關聯的人文故事,不禁唏噓感嘆一番。 緣起 這幾日閑來無事擼代碼,無意中發現一樁趣事。原以為是一個Java的bug,沒想到經過一系列死磕,挖掘出了一段和中國歷史乃至人類文明相關聯的人文故事,不禁唏噓感嘆一番。 這件事的緣起很簡單,我在實現計算兩個日期天數距離邏輯的過程中...
摘要:日期轉換程序思想言歸正傳。下述代碼以年與年為例,給出了兩年每個月份的天數以及每年月日的禮拜日期,以此作為起點計算該年中任意一個日期的禮拜時間。 [Python實踐] 利用python實現的日期映射禮拜X的簡單實現 2018年12月19日 最近在處理分析數據的時候,突發奇想試著從用戶離職的日期上判斷是主動辭職還是被動解雇?數據的背景是美國某企業員工離職日期數據,根據美國常見的周薪/半月薪...
摘要:儒略日就是指從公元前年月日開始所經過的天數,就被指定為公元前年月日到公元前年月日之間的小時,依次順推,每一天都被賦予一個唯一的數字。 ??最近閑來無事,突然想了解下中國農歷與中國陽歷之間的關系,經過一番調研發現這里面的水還比較深,涉及天文學、歷史、宗教等一些知識,發現挺有意思的就準備做一系列的總結,主要是防止自己忘記了,而且搜索了一下簡書上的文章也么沒有相關文章進行描述,所以借此機會跟...
摘要:透明表里的時間戳,數據類型為有個需求計算這兩個時間戳之間的天數間隔,丟棄時間戳年月日位后面的小時分鐘秒。直接用的字符串操作函數是不行的,因為時間戳類型和期待的字符串類型不匹配。 ABAP透明表里的時間戳,數據類型為dec: showImg(https://segmentfault.com/img/remote/1460000016828137); showImg(https://seg...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1982·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02