實習醫師排班表,常常用 Excel 或是線上的 Google Sheets, 但是排完以後,要輸入自己常用的行事曆 App 總是要一個一個點不太方便,於是筆者就摸索快速連續輸入的方法,最後成功使用 macOS 內建的 Apple script 完成。

工序指令程式簡介

macOS 平台上面有一個一直隱藏很深的工具:「Script Editor-工序指令程式」,可以撰寫 Apple Script 來執行任務,簡化原本的繁瑣操作流程。

在 Spotlight 搜尋 「工序指令編寫程式」即可開啟

ScriptEditor

相關資源可以參考蘋果官方Documentation

程式碼分享

在工序指令編寫程式內輸入以下這些程式碼執行即可:

set theCon to "true"
repeat until theCon ≠ "true"
	set calendarName to "個人"
	set theSummary to "值班"
	display dialog "Type in duty area" default answer "急診"
	set theLocation to text returned of the result
	display dialog "Notes? ex:白班" default answer "白班"
	set theDescrption to text returned of the result
	display dialog "Type in duty date" default answer "2018/3/8"
	set startDate to text returned of the result
	set startDate to date startDate
	set endDate to (startDate) + (1 * days)
	
	tell application "Calendar"
		tell (first calendar whose name is calendarName)
			set newEvent to make new event at end of events with properties {summary:theSummary, start date:startDate, end date:endDate, description:theDescrption, location:theLocation, allday event:true}
			tell newEvent
				make new display alarm at end of display alarms with properties {trigger interval:-2880}
				
			end tell
		end tell
	end tell
	
	display dialog "Continue?" with default answer
	set theCon to text returned of the result
end repeat

說明:

  1. setcalendarName to "個人",此處可以換成在 macOS 行事曆 App 內預設的,如果你有跟 Google 行事曆同步,就可以改為與 Google 同步的 "Google",這樣 Google 行事曆也會同步到。
  2. theSummary 是值班事件的名稱
  3. theLocation 輸入值班區域,然後會存到行事曆事件的內容描述
  4. theStartDate 我設成輸入的日期,以及endDate 為該日期+1天,另外我將輸入的事件設成全天事件
  5. make new display alarm...{trigger interval:-2880} ,單位是分鐘,我設成兩天前提醒,可以自行更改。不過這是在行事曆預設的提醒之外外加的。
  6. 當最後 "Continue?" 不是 true 或者中途按取消,迴圈就會中斷。

執行效果

BatchinputDutyday

CalendarViewEx

如果不想自行貼上,這邊也有輸出成程式可以下載使用,不過每次輸入的預設值都要修改,不見得完全符合需求。

如果對於 Apple script 有興趣,可以再研究工序指令程式內的指令辭典。看自己常用的程式是否支援 Apple script 控制,搞不好可以自行設計規劃一下自己日常常執行的動作,節省不少時間‧

OpenDIc