如何通过AppleScript在InDesign中按脚本标签选择文本框并修改属性
错误原因
- 你使用
every text frame whose label is xxx语法获取文本框时,即使只有一个匹配结果,返回值也是包含文本框对象的列表,直接对列表读取geometric bounds属性会触发不存在属性的报错。 - 设置填充色时不能直接传入色板名称的数组,需要引用当前文档下对应名称的色板对象。
修复后完整代码
set labelList to {"Fred","Alice","Bob"} set valueList to {107,42,42} tell application "Adobe InDesign 2020" set myDocument to active document tell myDocument -- 批量循环处理所有标签对应的文本框 repeat with i from 1 to count of labelList -- 获取匹配标签的文本框列表 set matchFrames to every text frame whose label is (item i of labelList) -- 仅当存在匹配结果时执行操作 if (count of matchFrames) > 0 then -- 取第一个匹配的文本框(标签唯一的情况下只有这一个) set targetFrame to item 1 of matchFrames -- 读取原有几何边界,参数顺序固定为 [上, 左, 下, 右] copy geometric bounds of targetFrame to {topVal, leftVal, bottomVal, rightVal} -- 设置新宽度,单位指定为毫米避免单位换算问题 set geometric bounds of targetFrame to {topVal, leftVal, bottomVal, leftVal + (item i of valueList) as millimeters} -- 绑定文档内对应名称的色板 set fill color of targetFrame to swatch "Secondary 1" end if end repeat end tell end tell
注意事项
- 上述代码已经按照
geometric bounds的官方参数顺序调整了宽度修改逻辑,可直接实现修改宽度不影响其他位置属性的需求 - 可提前校验所有标签的唯一性,避免出现多个文本框匹配同一个标签,导致仅修改第一个匹配结果的问题
- 如需不同文本框设置不同填充色,可新增一个和标签列表位置一一对应的色板名称列表,循环中读取对应位置的色板即可
- 代码已内置批量循环逻辑,可直接适配100个文本框的批量修改需求
内容的提问来源于stack exchange,提问作者Reluctant_coder
相关产品推荐
相关产品推荐

