You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 03:20:16