2017-11-06 2 views
0

내가 잘 작동하는 표 셀의 레이블로 태그가 지정된 Indesign의 모든 콘텐츠를 대체하는 스크립트가 있습니다. 부족한 것은 내가 2 개의 셀에 동일한 레이블을 부여 할 때 스크립트가 찾은 첫 번째 레이블의 내용 만 바꿉니다. 그래서 동일한 라벨을 가진 모든 콘텐츠를 대체하는 스크립트를 원합니다. 누구나이를 달성하는 방법에 대한 아이디어가 있습니까?indesign에서 XML을 통해 내용을 반복적으로 바꾸기

var main = function() { 
    var doc = app.properties.activeDocument, 
    root, xe, price, 
    tags = <tags> 

<PVDF8HNAPK40>100</PVDF8HNAPK40> 
<PVDF8HNAPK50>100</PVDF8HNAPK50> 
<PVDF8HNAPK63>100</PVDF8HNAPK63> 
<PVDF8HNAPK75>100</PVDF8HNAPK75> 

</tags>, tag, xes; 


    if (!doc) return; 

    root = doc.xmlElements[0]; 

    tags = tags.children(), n = tags.length(); 

    while (n--) { 
     tag = tags[n]; 
     xes = root.evaluateXPathExpression (".//"+ String(tag.name())); 
     if (xes.length) { 
      xe = xes[0]; 
      xe.contents = String(tag).replace (/\./g, ","); 

     } 
    } 
} 


var u; 

app.doScript ("main()",u,u,UndoModes.ENTIRE_SCRIPT, "The Script"); 

답변

0

마치 다른 루프 일뿐입니다. 심지어 일을 만들기 위해, 나는 바깥 쪽 while 루프를 for 루프로 바꿨다.

var main = function() { 
    var doc = app.properties.activeDocument, 
    root, xe, price, tag, xes, 
    tags = <tags> 
     <PVDF8HNAPK40>100</PVDF8HNAPK40> 
     <PVDF8HNAPK50>100</PVDF8HNAPK50> 
     <PVDF8HNAPK63>100</PVDF8HNAPK63> 
     <PVDF8HNAPK75>100</PVDF8HNAPK75> 
    </tags>; 

    if (!doc) return; 

    root = doc.xmlElements[0]; 
    tags = tags.children(); 

    for (var t = 0; t < tags.length(); t++) { 
     tag = tags[t]; 
     xes = root.evaluateXPathExpression (".//"+ String(tag.name())); 
     for (var i = 0; i < xes.length; i++) { 
      xe = xes[i]; 
      xe.contents = String(tag).replace (/\./g, ","); 
     } 
    } 
} 

var u; 
app.doScript ("main()",u,u,UndoModes.ENTIRE_SCRIPT, "The Script"); 

면책 조항 : InDesign을 가지고 있지 않습니다. 이것은 테스트되지 않은 코드입니다.

+1

감사합니다. @Tomalak 내일 아침에 테스트하고 작동하는지 알려 드리겠습니다. – Christophe

+0

고마워요! @Tomalak 그것이 작동하는 것처럼 보입니다, 많은 감사합니다! – Christophe

관련 문제