问题: 我试图避免循环浏览文档,直到找到标签然后抓住父项。有谁知道是否有办法通过 id 或句柄找到谷歌文档元素?
上下文: 我有一个脚本可以打开定义的模板文档;逐个元素将其复制到新文档中,然后使用 replaceText 函数将任何 MUSTACHE 标签替换为传入对象的值。这部分工作正常,但有一个部分我想根据对象值作为数组重复表行。不幸的是,除了以下内容之外,我似乎无法弄清楚如何在模板文档中找到该表:
if('{{ some tag }}' in aElement){
var repeatableElement = aElement.getParent();
if(repeatableElement){
goRunRepeatFunction();
}
}
似乎应该有一种方法可以通过id直接跳转到元素。
可以使用以下代码片段完成任务:
function getElement() {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var numOfElements = body.getNumChildren();
var element = body.getChild(INDEX_OF_THE_CHILD).asText();
console.log(element.getText());
}
这将收集文档的body
并检索其具有的子项数。此数字表示文档具有的元素。因此,为了访问某个元素,您只需要使用getChild(index)
方法
注意
请记住,getNumChildren()
方法最终将返回文档中所有元素的数量,包括空行 - 这些也将被视为元素。
通常,在 Apps 脚本中处理文档时,会按元素的类型检索元素以保留它们。因此,例如,如果您的文档中有images
,最好使用getImages()
检索这些图像,这最终将返回包含文档中所有图像的列表,每个图像都可以通过其索引访问。
另一种方法是使用getParagraphs()
方法检索正文中的所有段落,但如果知道文档的确切结构,则可以按元素的类型检索所有元素,然后按类型访问它们。
参考
Class ContainerElement - getNumChildren((;
类容器元素 - getChild(整数(;
类主体 - getParagraphs((。