source: 交通部中央氣象局
source: 中華日報
source: 自由時報
source: wiki
(結束接開始)
最常見之起訖關係
連續性之作業
(開始對開始)
可同時進行之作業
作業開始有先後關係
(結束對結束)
可同時進行之作業
作業結束有先後關係
ES | 工項 | EF |
---|---|---|
LS | 天數 | LF |
工項 | 天數 | 前項 |
---|---|---|
A | 2 | - |
B | 7 | A |
C | 3 | A |
D | 5 | B、C |
0 | A | 2 |
---|---|---|
0 | 2 | 2 |
2 | B | 9 |
---|---|---|
2 | 7 | 9 |
9 | D | 14 |
---|---|---|
9 | 5 | 14 |
2 | C | 5 |
---|---|---|
6 | 3 | 9 |
浮時:4天
節日 | 天數 | 節日 | 天數 |
---|---|---|---|
元旦 | 5天 | 端午 | 6天 |
春節 | 13天 | 大學測驗 | 2天 |
二二八 | 6天 | 中秋 | 5天 |
清明 | 7天 | 雙十 | 6天 |
import datetime as dt
import openpyxl as opx
###導入模組
print("請輸入開始日期「yyyy mm dd」")
d = input().split()
start_date = dt.date(int(d[0]), int(d[1]), int(d[2]))
###取得開始日期
print("請輸入「工作項目 日程」,若輸入完成請輸入「end」")
arrange = True
current_date = start_date
worklist = []
datelist = []
start_list = []
end_list = []
holiday_list = ["清明節", "端午節", "大學測驗", "中秋節", "雙十節", "元旦", "春節", "二二八"]
holiday_date = [7, 6, 2, 5, 6, 5, 13, 6]
holiday_start_date = [dt.date(2023, 3, 31), dt.date(2023, 6, 21), dt.date(2023, 7, 11), dt.date(2023, 9, 28), dt.date(2023, 10, 6), dt.date(2023, 12, 30), dt.date(2024, 1, 18), dt.date(2024, 2, 24)]
holiday_counter_list = []
counter = 0
holiday_counter = 0
for a in holiday_start_date:
if a - start_date < dt.timedelta(days = 0):
holiday_counter += 1
else:
break
while arrange:
work = input().split()
if work[0] == "end":
arrange = False
break
else:
start_list.append(current_date)
worklist.append(work[0])
datelist.append(work[1])
current_date = current_date + dt.timedelta(days = int(work[1]) - 1)
for a in range(len(holiday_list)):
if holiday_start_date[a] - start_list[-1] < dt.timedelta(days = 0):
continue
elif holiday_start_date[a]- start_list[-1] > current_date - start_list[-1]:
break
else:
current_date = current_date + dt.timedelta(days = holiday_date[a])
holiday_counter_list.append(counter)
end_list.append(current_date)
current_date += dt.timedelta(days = 1)
counter += 1
###排程
tra_counter = 0
for a in range(len(worklist)):
tra = False
for b in holiday_counter_list:
if a == b:
tra = True
break
else:
continue
if tra:
print(worklist[a], start_list[a], end_list[a], datelist[a], holiday_list[tra_counter + holiday_counter], holiday_date[tra_counter + holiday_counter])
tra_counter += 1
else:
print(worklist[a], start_list[a], end_list[a], datelist[a])
###輸出結果
schedule = opx.Workbook()
sds = schedule.active
page1 = schedule.worksheets[0]
tra_counter = 0
schedule_data = []
for a in range(len(worklist)):
tra = False
for b in holiday_counter_list:
if a == b:
tra = True
break
else:
continue
if tra:
schedule_data.append([worklist[a], start_list[a], end_list[a], datelist[a], holiday_list[tra_counter + holiday_counter], holiday_date[tra_counter + holiday_counter]])
tra_counter += 1
else:
schedule_data.append([worklist[a], start_list[a], end_list[a], datelist[a]])
for row in schedule_data:
page1.append(row)
for a in range(1, len(worklist)+1):
page1.cell(row = a, column = 2).number_format = 'mm-dd'
page1.cell(row = a, column = 3).number_format = 'mm-dd'
schedule.save('三週進度表.xlsx')
.新增模式功能,可選擇工項種類直接排程,不需多次輸入
.新增試算表讀取功能,可直接讀取舊資料建檔
.引入預定進度,新增交叉比對功能,自動化比較進度差異
.格式修整及分類建檔等優化...