如何用AppleScript操作Mac日历中调整后的重复事件
如何通过AppleScript访问Mac日历中修改过的重复事件实例
Mac日历里,修改重复事件的单个实例(比如拖拽改时间、修改名称)不会生成新的独立事件,而是作为**例外实例(exception occurrence)**关联在原重复事件的occurrences集合里。你之前的代码只遍历了主事件,自然看不到这些修改后的实例。
解决方案:遍历重复事件的occurrences集合
通过访问主重复事件的occurrences属性,可以获取所有实例(包括常规重复实例和修改过的例外),再通过is exception属性区分是否是修改过的实例。
以下是修改后的代码,能捕获你修改过的那个实例:
tell application "Calendar" set sourceCal to calendar id "4AA1E22C-0472-44D1-A582-31A7310AF9B4" set allEvents to every event of sourceCal repeat with mainEvent in allEvents log "主重复事件: " & summary of mainEvent -- 筛选最近30天内的实例(避免返回过多历史数据) set dateRangeStart to (current date) minus (30 * days) set eventOccurrences to occurrences of mainEvent whose start date ≥ dateRangeStart repeat with occ in eventOccurrences set occSummary to summary of occ set occStartTime to start date of occ set isModified to is exception of occ if isModified then log " ✅ 例外实例: " & occSummary & " | 时间: " & occStartTime else log " 常规实例: " & occSummary & " | 时间: " & occStartTime end if end repeat end repeat end tell
关键属性说明
is exception:布尔值,标记该实例是否是修改过的例外(比如改时间、名称、备注等)occurrences:主重复事件的所有实例集合,支持通过日期范围筛选(比如上面的start date ≥ dateRangeStart)- 例外实例的所有修改属性(
summary、start date、end date等)都直接存储在对应的occurrence对象中,可以直接读取或修改
注意事项
如果不限制日期范围,occurrences会返回该重复事件的所有历史和未来实例,可能导致脚本运行缓慢或内存占用过高,建议根据需求添加日期过滤条件。
内容的提问来源于stack exchange,提问作者Ian Frost
相关产品推荐
相关产品推荐

