我的用户在他的Gdoc中有以下选择。
现在他从边栏上想要替换他在文件上做出的选择。
GAS的问题是,是否可以立即这样做,例如:
var selection = DocumentApp.getActiveDocument().getSelection()
selection.replace("newtext")
或者我是否必须遍历selection.getRangeElements()
才能删除它们(或替换它们),而不是将新文本放在那个位置?
答案 0 :(得分:2)
不是,这是不可能的(好吧,如果是的话,它没有记录)。
你必须遍历所选的元素,主要是因为选择可能会占用部分段落,迫使你管理它。即仅删除所选部分。对于已完成的选定元素,您可以完全删除它们(如图像)。
以下是关于如何执行此操作的实现(由我修改的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!";
}