我遇到了一个有趣的困境:如果我只知道其名称的PART,我如何在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);
此代码不起作用。我很确定这是因为具有名称被“&lt;”包围的特定textFrames和“&gt;”标志由这些框架内的文本自动生成。除了在运行脚本之前重命名这些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);
如何克服最后一道障碍?
答案 0 :(得分:2)
如果你想找到一个包含单词“Other”的TextFrame,你可以尝试这样的事情:
app.findTextPreferences = NothingEnum.NOTHING;
app.findTextPreferences.findWhat = "Other";
var textArray = document.findText();
var textFrame = textArray[0].parentTextFrames[0];
如果您想找到名称中包含“其他”的TextFrame,那么您可能需要自己搜索一下:
var textFrame = findTextFrame("Other");
function findTextFrame(searchStr) {
var textFramesArray = document.textFrames.everyItem().getElements();
for (var i = 0; i < textFramesArray.length; i++) {
var textFrame = textFramesArray[i];
if (textFrame.name.indexOf(searchStr) != -1) {
return textFrame;
}
}
}
请注意,任何一种方法都可以找到多个匹配项,并且只返回第一个匹配项。
编辑:您从中获得了什么输出?
app.findGrepPreferences = NothingEnum.NOTHING;
app.findGrepPreferences.findWhat = "Other";
var textArray = document.findGrep();
$.writeln("Found " + textArray.length + " matches.");
for (var i = 0; i < textArray.length; i++) {
$.writeln("\nMatch " + (i + 1) + ":");
var text = textArray[i];
$.writeln("Contents: " + text.contents.toString());
$.writeln("Number of parent text frames: " + text.parentTextFrames.length);
$.writeln("Type of parent: " + text.parent.constructor.name);
}
答案 1 :(得分:0)
知道了。我前面提到的那段代码让我有90%的方式,但我完全忘记了这样一个事实:一旦我有了textFrame对象,我就不再需要引用它上面的任何层次结构了。因此,以下代码将起作用(嵌套if
语句是由于某些textFrame没有表的事实):
var otherOverTable = findTextFrame(document, "Other").tables.item(0);
var outputTable = findTextFrame(document, "OUTPUT").tables.item(0);
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];
}
}
}
}
感谢您帮助我指导正确的方向,dln385!