專門處理兒家班表 PDF 轉 Excel,並對齊人資系統班別設定;保留日期欄、班別文字、多行儲存格、顏色語意與排班規則,適用於兒家、保育、生輔股輪值表分析與導入。
當使用者提供兒家班表 PDF,要求:
此 skill 專門負責把兒家班表 PDF 還原成可編輯的 .xlsx,並整理可重用的排班解讀規則。
此 skill 不只做「轉檔」,還要支援「人資系統導入前的規格對齊」:
pdfplumber 是主工具,優先用 extract_table() 取整張表。pdftotext -layout 只能當輔助比對,不可當最終真值。女樓08-16 拆成 女 與 樓08-16。08-13:08:00-13:00,5 小時。15-23:15:00-23:00,8 小時。13-23:13:00-23:00,10 小時。08-13/18-23:多段班;上午 5 小時 + 晚上 5 小時。女樓13-23、男三15-23:表示工作場域 + 時段。子琳08-13:工讀補位型短班,不一定遵循正職輪值節奏。子琳特教伴讀\n08-13男樓\n13-15女樓:同一日多段且跨場域,必須保留換行或至少保留完整內容。夜班 表示值大夜或夜間輪值,不等於一般 8 小時白班。事假、特休、颱風假 等文字,優先視為假別或停班狀態,不再解讀為工時。2、3、4 這類數字時,通常是原表內部標記或補位註記,先原樣保留,不能自行改寫成工時。白底 不是單一班別,而是「有出勤」的集合;實際班別要看下方時段說明列。未知班別,不得自動當成 08-18 或 15-23。男二、男三、男樓夜班、女二、女三、女樓夜班);若該格含有同一姓名,需把該人對應時段回填到上方人員列。婷予08-13/18-23 這種格式,應回填 08-13/18-23;若是 亮寧/婷予 這種多人且未寫時段,才回填崗位名稱本身。優先:
import pdfplumber
with pdfplumber.open(pdf_path) as pdf:
table = pdf.pages[0].extract_table()
處理方式:
常見主資料區:
偉培、郁茵、卉蓁、婷予、亮寧工讀\n子琳常見後續區塊:
原則行政班男二男三男樓夜班女三女樓夜班行事曆規則:
建議使用 openpyxl 或 pandas + openpyxl engine:
wrap_text=True\n大夜班數、休假、特休、其他先從 PDF 的矩形填色取得候選色:
page.rects
rect["non_stroking_color"]
但套色時,不要只依 RGB 亂猜,必須先套用已知語意:
其餘顏色若出現在 行事曆 或註記區,可先保留原色作視覺復刻,但不要自行延伸語意。
15-23、13-23、08-18、08-13/18-23女二午晚、女三午晚、男樓15-23 等「場域+班別」混合寫法空白白底(需人工確認)與 夜班(固定定義)出勤管理 -> 班別設定 是否已有對應班別碼缺碼未使用班別命名衝突13-23 是否視為標準班、延長工時或需拆段寒暑假班 與 平日班 是否共用代碼空白白底 的預設班別是否可被正式定義Excel -> 系統匯入格式 轉換,再進入批次匯入。排班表匯入 (3).xls)Sheet0:*員編、姓名、YYYYMMDD 日期欄說明:定義匯入語法與特殊符號(必須遵守)班別代碼班別代碼-崗位代碼,費用部門/地點國!勞動節(! 用於國假描述)#假別代碼(例如 #事)休息日 -> 休例假日 -> 例國假 -> 國# 開頭,例如 #事、#特Inbox/2026.03.28人資系統各單位班表導入/班別代碼參照_20260329.csv狀態=停用 的班別代碼(如 b0000、b0029)。夜班 預設對應 b0002(兒大夜,22:30-08:00);若時段不一致需改列 待確認。待確認。08-13/18-23):待人工拆解,不得硬塞單一班別。pdftotext -layout 切欄時,女樓08-16 容易被錯拆成跨兩欄內容。pdfplumber.extract_table() 雖然不完美,但對保留合併儲存格與換行內容,比純文字切欄穩定得多。女二午晚、括號註記、空白白底)會讓自動 mapping 失敗。.xlsx班別設定 已存在、哪些仍缺漏