我遇到了一個有趣的窘境:如何在InDesign CS6中引用特定的文本框,如果我只知道其名稱的一部分?我有這樣的代碼:參考InDesign中的文本框的部分名稱
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對象之外,我該怎麼辦?有沒有什麼方法可以引用第一個,例如,通過說出如下內容:「獲取包含'Other'的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);
我該如何着手克服這最後一道障礙?
我在你的第二個例子上已經嘗試了很多變體,但是我害怕那不起作用。沒有給出明確名稱的任何textFrame會在「<」和「>」符號中自動給出一種代理名稱。可悲的是,即使這些「代理」名稱不能在腳本中引用,看起來。每當我在'for'循環中運行'$ .writeln(textFramesArray [i] .toString());'時,我只會得到'[object TextFrame]'。當我運行'$ .writeln(textFramesArray [i] .name);',我在控制檯中得到一個空行。這告訴我所有的textFrame都是未命名的。 – Sturm
嘗試使用'$。writeln(textFramesArray [i] .contents.toString());'獲得更多有用的信息。如果TextFrame確實是未命名的,那麼您會希望在答案中使用第一種方法。 – dln385
試過你的第一個例子,以及它的幾個變化,沒有成功。 ESTK甚至在最後一行給我一個調試錯誤,說'undefined不是一個對象。哇,這一點起初比我想象的要困難得多。 – Sturm