2013-10-04 8 views
5

Il mio obiettivo è sostituire una parte di testo in un documento di Google Drive con il contenuto di un altro documento.Ottieni l'indice child di findtext nello script API di google

Sono stato in grado di inserire il documento in una determinata posizione nell'altro documento, ma ho difficoltà a determinare l'indice secondario del testo che voglio sostituire. Ecco quello che ho finora:

function replace(docId, requirementsId) { 

var body = DocumentApp.openById(docId).getActiveSection(); 
var searchResult = body.findText("<<requirementsBody>>"); 
var pos = searchResult.?? // Here I would need to determine the position of the searchResult, to use it in the insertParagraph function below 

var otherBody = DocumentApp.openById(requirementsId).getActiveSection(); 
var totalElements = otherBody.getNumChildren(); 
for(var j = 0; j < totalElements; ++j) { 
var element = otherBody.getChild(j).copy(); 
    var type = element.getType(); 
    if(type == DocumentApp.ElementType.PARAGRAPH) { 
     body.insertParagraph(pos,element); 
    } else if(type == DocumentApp.ElementType.TABLE) { 
    body.insertTable(pos,element); 
    } else if(type == DocumentApp.ElementType.LIST_ITEM) { 
    body.insertListItem(pos,element); 
    } else { 
    throw new Error("According to the doc this type couldn't appear in the body: "+type); 
    } 
} 


}; 

Qualsiasi aiuto sarebbe molto apprezzato.

risposta

5

findText()

restituisce un RangeElement.

È possibile utilizzare

var r = rangeElement.getElement()

per ottenere l'elemento contenente il testo trovato.

Per ottenere la sua childIndex è possibile utilizzare

r.getParent().getChildIndex(r) 
2

Grazie alla risposta di bruce Sono stato in grado di capire una soluzione a questo problema, se mi è stato l'inserimento di elementi da un altro documento ho bisogno di trovare in realtà l'indice del genitore del testo trovato, poiché il testo trovato era solo un elemento di testo all'interno di un elemento di paragrafo. Quindi, avevo bisogno di trovare l'indice dell'elemento Paragrafo e quindi inserire i nuovi elementi in relazione a quel Paragrafo.

Il codice simile a questo:

var foundTag = body.findText(searchPattern); 
    if (foundTag != null) { 
    var tagElement = foundTag.getElement(); 
    var parent = tagElement.getParent(); 
    var insertPoint = parent.getParent().getChildIndex(parent); 
    var otherBody = DocumentApp.openById(requirementsId).getActiveSection(); 
    var totalElements = otherBody.getNumChildren(); 

    for(var j = 0; j < totalElements; ++j) { 
    ... then same insertCode from the question above ... 
     insertPoint++; 
    } 
+0

Quando c'è un'immagine in linea prima della posizione findText, dà l'indice figlio del paragrafo prima l'immagine, non dopo che l'immagine come necessario. C'è una soluzione? –

Problemi correlati