在 InDesign 中使用变量更改文本 javascript

Change text using a variable in InDesign javascript

我试图找到活动页面上的所有“#”并将它们更改为数字,即。 1、2、3。 . .

下面的代码是我认为行得通的,但行不通。相反,它会将每个“#”更改为“0”。

app.findTextPreferences = app.changeTextPreferences = NothingEnum.NOTHING;
app.findTextPreferences.findWhat = "#";

var finds = app.activeDocument.findText();
if (finds.length > 0) {
   for (var i = 0; i < finds.length; i++)  
   {  
      app.changeTextPreferences.changeTo = "no: " + i;
      app.activeDocument.changeText();
   }  
   else
   {
      alert("Nothing has been found");
   }
}

正如 ali haydar 所说,changeText 将在全球范围内应用,并将打破以前的 findText 文本引用。您需要的是在循环中使用内容 属性。

app.findTextPreferences = app.changeTextPreferences = NothingEnum.NOTHING;
app.findTextPreferences.findWhat = "#";

var finds = app.activeDocument.findText();
if (finds.length > 0) 
{
    for (var i = 0; i < finds.length; i++)  
    {  
      finds[i].contents = "no: " + String(i);
    }  
}
else
{
alert("Nothing has been found");
}

事实上你甚至可以摆脱 if 条件:

app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.findWhat = "#";

var finds = app.activeDocument.findText();
var n = finds.length;
var nStart = n;
while (n-- ) finds[n].contents = "no: " + String(n+1);
alert(nStart? nStart+" replacements made…" : "Nothing has been found");

只考虑第 1 页…

var main = function(){
    var doc = app.properties.activeDocument,
     finds,n;

    app.findTextPreferences = app.changeTextPreferences = null;
    app.findTextPreferences.findWhat = "#";

    if ( !doc ) return;
    finds = doc.findText();
    n = finds.length;

    while (n-- ) {
        finds[n].parentTextFrames.length
        && finds[n].parentTextFrames[0].isValid
        && finds[n].parentTextFrames[0].parentPage.id==doc.pages[0].id
        && finds[n].contents = "no: " + String(n+1);
    }

};

main();