我构建了一个应用脚本来复制文档,并根据我在Google电子表格中输入的数据对其进行编辑。
复制和编辑文档后,我想删除某些文本段落。
我正在使用以下内容来查看是否可以找到该位置
我正在搜索的文字,但我的代码返回Range Element.
var body = DocumentApp.openById(copyID).getBody();
var para = body.findText('X1');
Logger.log(para);
我理想的状态是在文档中提供两个位置的应用程序脚本,然后让Apps脚本删除该范围内的所有文本。
如何生成正确的偏移并删除文本?
答案 0 :(得分:3)
我使用以下内容查看是否可以找到我正在搜索的文本的位置,但我的代码返回了Range Element。
应该发生这种情况,这里是关于范围元素的文档中的一些信息。
Class RangeElement
元素周围的包装器,具有可能的开始和结束偏移量。这些偏移允许在搜索结果,文档选择和命名范围中表示Text元素中的一系列字符 https://developers.google.com/apps-script/reference/document/range-element
我的理想状态是为应用程序脚本提供文档中的两个位置,然后让Apps脚本删除这些范围内的所有文本。
使用以下内容检索偏移并删除文本。
var startOffset = rangeElement.getStartOffset();
var endOffset = rangeElement.getEndOffsetInclusive();
rangeElement.getElement().asText().deleteText(startOffset,endOffset);
<强> getStartOffset()强>
获取范围元素中部分范围的开始位置。如果元素是Text元素并且isPartial()返回true,则offset是范围开始之前的字符数(即范围中第一个字符的索引);在任何其他情况下,此方法返回-1 <子> https://developers.google.com/apps-script/reference/document/range-element#getStartOffset() 子>
<强> getEndOffsetInclusive()强>
获取范围元素中部分范围结束的位置。如果元素是Text元素并且isPartial()返回true,则offset是范围中最后一个字符之前的字符数(即范围中最后一个字符的索引);在任何其他情况下,此方法返回-1 https://developers.google.com/apps-script/reference/document/range-element#getEndOffsetInclusive()
deleteText(startOffset,endOffsetInclusive)
删除一系列文字 https://developers.google.com/apps-script/reference/document/text#deleteText(Integer,Integer)
如何生成正确的偏移并删除文本?
以下脚本会这样做。
var rangeElement = DocumentApp.openById(copyID).getBody().findText('X1');
if (rangeElement.isPartial()) {
var startOffset = rangeElement.getStartOffset();
var endOffset = rangeElement.getEndOffsetInclusive();
rangeElement.getElement().asText().deleteText(startOffset,endOffset);
} else {
rangeElement.getElement().removeFromParent();
}
答案 1 :(得分:0)
我一直试图解决这个问题,并找到了以下代码片段:
var start = '{testingstart}'; // Starting text
var end = '{testingend}'; // Ending text
var startPara = findThisText(body, start); // Find element that has start text
var endPara = findThisText(body, end); // Find element that has end text
var stIndex = body.getChildIndex(startPara); // Find index number of the starting child element
var edIndex = body.getChildIndex(endPara); // Find the index number of the ending child element
var loop = edIndex - stIndex;
for(var i = 0; i < loop; i++){
// Keep removing the child element with index = stIndex until the loop ends.
var removing = body.getChild(stIndex);
body.removeChild(removing);
}
我还使用以下辅助函数来查找给定文本所需的元素:
// Helper function to locate field based on search text
function findThisText(body, text) {
var found = body.findText(text);
if(found) {
return found.getElement().getParent();
} else {
return null;
}
}
它的优点在于它删除了开始和结束目标之间的任何ElementType。如果我在段落之间也有表格,它对我有用。 参考:https://developers.google.com/apps-script/reference/document/body