My User has the following selection in his Gdoc.
现在,他想从侧边栏替换他在文档中所做的选择。
GAS 问题是是否可以立即做到这一点,例如:
var selection = DocumentApp.getActiveDocument().getSelection()
selection.replace("newtext")
或者我必须循环遍历selection.getRangeElements()
为了删除它们(或替换它们),而不是以某种方式将新文本放在该位置?
不,这是不可能的(好吧,如果是的话,也没有记录)。
您必须循环遍历选定的元素,主要是因为选择的内容可能包含段落的一部分,迫使您对其进行管理。即仅删除选定的部分。对于已完成的选定元素,您可以完全删除它们(如图像)。
这是关于如何执行此操作的实现(我修改了 Kaylan 翻译脚本的一部分,以正确替换图像和部分选定的段落。
function replaceSelection(newText) {
var selection = DocumentApp.getActiveDocument().getSelection();
if (selection) {
var elements = selection.getRangeElements();
var replace = true;
for (var i = 0; i < elements.length; i++) {
if (elements[i].isPartial()) {
var element = elements[i].getElement().asText();
var startIndex = elements[i].getStartOffset();
var endIndex = elements[i].getEndOffsetInclusive();
var text = element.getText().substring(startIndex, endIndex + 1);
element.deleteText(startIndex, endIndex);
if( replace ) {
element.insertText(startIndex, newText);
replace = false;
}
} else {
var element = elements[i].getElement();
if( replace && element.editAsText ) {
element.clear().asText().setText(newText);
replace = false;
} else {
if( replace && i === elements.length -1 ) {
var parent = element.getParent();
parent[parent.insertText ? 'insertText' : 'insertParagraph'](parent.getChildIndex(element), newText);
replace = false; //not really necessary since it's the last one
}
element.removeFromParent();
}
}
}
} else
throw "Hey, select something so I can replace!";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)