0

我有一个包含大量行/列(例如~250列,数千行)的大型电子表格,我试图通过使用AppleScript循环遍历每一行,将该行的~250个变量复制到TextEdit集来转换为PDF到富文本(用于粗体格式等),然后使用系统事件将 txt 保存为 PDF。这是代码的摘要:

on run
    set initialRow to 1
    tell application "System Events"
        tell application process "TextEdit"
            set frontmost to true
        end tell
    end tell
    repeat
        tell application "Microsoft Excel"
            -- CLEAR MY ~250 VARIABLES FROM PREVIOUS ROW'S VALUES TO MAKE SURE NOTHING IS CARRIED OVER BY MISTAKE
            -- THEN SET MY ~250 VARIABLES TO THE NEXT ROW'S VALUES
            if exampleValue is "" then exit repeat
        end tell
        tell application "TextEdit"
            set the text of the front document to ""
            -- THEN SET FIRST PARAGRAPH TO MY FIRST VARIABLE PLUS A LINE BREAK SO THEN THERE'S A NEW PARAGRAPH FOR THE NEXT VARIABLE, ETC
            -- THEN GO THROUGH ALL OF MY VARIABLES TO IMPORT THE IMPORTANT ONES INTO TEXTEDIT, SET SOME FORMATTING, ETC.
        end tell
        delay 1
        tell application "System Events"
            click menu item "Export as PDF…" of menu 1 of menu bar item "File" of menu bar 1 of application process "TextEdit"
            delay 1
            keystroke exampleValue -- SYSTEM EVENTS TYPES THE NAME OF THE PDF
            delay 1
            key code 36
            delay 1
        end tell
        set myRow to (myRow + 1)
    end repeat
end run

这一切都运行良好,没有错误(似乎!),小剂量完全没有问题。然而,问题是当脚本运行时会发生一些事情,它似乎在某个地方占用了越来越多的内存。前一百行左右一切都很好,但是在某些时候我的 Mac 完全停止运行任何东西,即我是否让脚本运行直到它开始产生超级随机错误(如果有帮助,我可以收集它们,但这就像随机每次都有不同的错误,所以那里没有多大帮助)或者即使我让脚本运行一段时间然后在它出错之前停止它 - 它会让我停止脚本但我实际上无法退出脚本编辑器或TextEdit 或 Excel,我的键盘停止工作,我无法强制退出任何东西,无法重置计算机等。它

我的其他脚本从来没有遇到过这个问题,但我通常也不使用系统事件,所以我的直觉是它与此有关。我是否需要以某种方式“重置”系统事件,或者出于某种原因清除内存,或者......?谢谢您的帮助!!

4

1 回答 1

1

弄清楚了!在 Activity Monitor 运行的情况下再次尝试脚本后,我发现每次迭代时都会弹出 3 个新进程 - Core Sync、Dropbox Finder Extension 和 SnailSVNLite - 然后永远不会消失!因此,如果我运行脚本 500 次,我最终会运行 1500 个新进程,尽管我不知道为什么告诉系统事件有任何事情在这样做,但几乎可以肯定这就是让我崩溃的原因。我在网上看了看,结果发现这些都是很久以前打开的 Finder 扩展,所以只需要转到系统偏好设置 > 扩展 > 添加的扩展,然后取消选中这 3 个扩展 - 然后问题就解决了! !

于 2022-01-28T16:10:10.337 回答