如何在InDesign中使用applescript按脚本标签选择文本框?

如何在InDesign中使用applescript按脚本标签选择文本框?,applescript,adobe-indesign,Applescript,Adobe Indesign,我正在尝试使用AppleScript通过使用预先存在的唯一标签来选择InDesign文档中预先存在的文本框,然后修改这些文本框的填充颜色和大小。(这是一个更大的工作流的一部分,该工作流根据列表中的值调整大约100个这样的帧的这些属性。文本帧的标签也在一个列表中,标签和值在各自的列表中的位置相同,目的是将其放入一个循环。) 在下面的示例代码中,“Fred”是文本框的标签,“Secondary 1”是我试图设置为文本框填充颜色的色样的名称,我试图在不更改任何其他几何边界的情况下将文本框的宽度指定为1

我正在尝试使用AppleScript通过使用预先存在的唯一标签来选择InDesign文档中预先存在的文本框,然后修改这些文本框的填充颜色和大小。(这是一个更大的工作流的一部分,该工作流根据列表中的值调整大约100个这样的帧的这些属性。文本帧的标签也在一个列表中,标签和值在各自的列表中的位置相同,目的是将其放入一个循环。)

在下面的示例代码中,“Fred”是文本框的标签,“Secondary 1”是我试图设置为文本框填充颜色的色样的名称,我试图在不更改任何其他几何边界的情况下将文本框的宽度指定为107 mm

set labelList to {"Fred","Alice","Bob"}
set valueList to {107,42,42}

tell application "Adobe InDesign 2020"
    set myDocument to active document -- presumes you've already done a data merge.
    tell myDocument
        set testFrame to every text frame whose label is item 1 of labelList
        copy geometric bounds of testFrame to {x0, y0, x1, y1}
        set geometric bounds of testFrame to {x0, y0, (x0 + item 1 of valueList), y1}
        set fill color of testFrame to {"Secondary 1"}
    end tell
    
end tell
此操作失败,出现以下错误:

“无法获取{应用程序“Adobe InDesign 2020”的文档id 2的扩展id 5872的文本框id 6546的几何边界。{文档id 2的«类sprd»id 5872的«类txtf»id 6546的«类gbnd»的编号-1728”

这个错误给了我一个文本框id号,这让我认为我成功地选择了标签为“Fred”的文本框,但我没有在下面几行中充分指定某些内容。因此,脚本无法正确读取或设置该文本框的属性

我遇到了很多创建文本框并设置其属性的脚本示例,网站上也有一个类似的问题,用于设置文本框中文本的属性-但这种情况下的答案是文本的属性由不同的对象持有,因此没有太多帮助


任何建议都将不胜感激

可能是因为这个打字错误吗

set valueList to (107,42,42}
可能应该有
{
而不是
(反之亦然,我不知道AppleScript)

语句

set testFrame to every text frame whose label is item 1 of labelList
返回一个列表。如果将该测试帧命名为sToProcess,然后

set testFrame to item 1 of testFramesToProcess

谢谢你指出这一点,尤里!不幸的是,问题仍然存在。(我尝试用我想要的值替换对这两个列表的引用,而且…没有骰子)。不过,我已经纠正了输入错误。另一种猜测是:如果文本框以某种方式移动到粘贴板之外,有时会发生类似的情况。您可以尝试在开始这部分脚本之前展开粘贴板。这会找到标记为“Fred”的文本框,将其宽度更改为
107
,并使用名为的样例对其背景进行着色“Secondary 1”。它在每个
标签列表项上循环,因此“Alice”和“Bob”都将其宽度设置为
42
,其背景色设置为“Secondary 1”。本质上,在代码中,当您
将testFrame设置为每个文本时…
会返回一个列表,而不是对文本框的单个引用。还有
{x0,y0,x1,y1}
零件似乎是错误的,几何图形是
{y0,x0,y1,x2}
-这应该有助于设置宽度而不是高度。谢谢,@RobC-每个“将返回一个列表,即使它是一个只有1项的列表,但我不会自己计算出来!我感谢您的循环示例。它似乎适用于labelList中的前两项,但不适用于第三项-知道为什么吗?可能是
labelList
中的第三项/文本框(即“Bob”)已锁定。在这种情况下,将
将testFrame的locked设置为false
添加到读取
设置testFrame的几何边界…
的行之前。这将在尝试更改文本框的几何图形和背景色之前解锁文本框。按照此操作。