我遇到了一个有趣的难题:如果我只知道其名称的一部分,如何在 InDesign CS6 中引用特定的 textFrame?我有这段代码:
var otherOverTable = document.layers.item("Spec Sheet").textFrames.item("<Other Printed ItemsYESNOOv>").tables.item(0);
var outputTable = document.layers.item("Spec Sheet").textFrames.item("<OUTPUT>").tables.item(0);
此代码不起作用。我很确定这是因为名称被“<”和“>”符号包围的特定文本框架是由这些框架中的文本自动生成的。
除了在运行脚本之前重命名那些 textFrame 对象之外,我还能做什么?有什么方法可以引用第一个,例如,通过说“获取名称中包含‘其他’的 textFrame”?我无法通过索引号引用它,因为每次运行脚本时都会有所不同。
编辑
谢天谢地,我有这段代码可以工作:
var otherOverTextFrame = findTextFrame(document, "Other");
var outputTextFrame = findTextFrame(document, "OUTPUT");
function findTextFrame(document, searchStr) {
var textFramesArray = document.textFrames.everyItem().getElements();
for (var i = 0; i < textFramesArray.length; i++) {
if (textFramesArray[i].tables.item(0).isValid) {
if (textFramesArray[i].tables.item(0).cells.item(0).contents.indexOf(searchStr) != -1) {
return textFramesArray[i];
}
}
}
}
这将返回一个[object TextFrame]
. 我认为这就是我所需要的,但我无法弄清楚如何引用它。例如,我需要更改该 textFrame 中表格中某个单元格的内容。但是,此代码不起作用:
var otherOverTable = document.layers.item("Spec Sheet").otherOverTextFrame.tables.item(0);
我该如何克服这最后一个障碍?