我使用一个模板在谷歌文档中的一个字母,我想填充字母后(动态)标题的信件自动通过App。是否有最佳做法将文本始终设置为相同的位置?我试着用占位符替换它。但有时我需要更换文本不止一次。
发布于 2022-02-08 02:34:32
在您的情况下,使用NamedRange?参考如何?
当使用NamedRange时,脚本如下所示。
示例脚本:
// Create custom menu.
function onOpen() {
DocumentApp.getUi().createMenu("sample")
.addItem("1. Install named range", "setNamedRange")
.addItem("2. Change text by named range", "changeTextByNamedRange")
.addItem("Delete named range", "deleteNamedRange")
.addToUi();
}
const nameOfNamedRange = "sample1"; // Please set the name of your named range.
// Set named range.
function setNamedRange() {
const doc = DocumentApp.getActiveDocument();
const ele = doc.getCursor().getElement();
const range = doc.newRange().addElement(ele).build();
doc.addNamedRange(nameOfNamedRange, range);
}
// Update named range.
function changeTextByNamedRange() {
const updateText = "updated sample"; // Please set the updated text you want.
const doc = DocumentApp.getActiveDocument();
const range = doc.getNamedRanges().find(r => r.getName() == nameOfNamedRange);
if (!range) {
throw new Error("No named range. Please install a named range.");
}
range.getRange().getRangeElements().forEach(e => e.getElement().asText().setText(updateText));
}
// Delete named range.
function deleteNamedRange() {
const doc = DocumentApp.getActiveDocument();
const range = doc.getNamedRanges().find(r => r.getName() == nameOfNamedRange);
if (!range) return;
range.remove();
}用法:
setNamedRange。这样,当前游标的点被设置为命名范围。changeTextByNamedRange。这样,更新后的文本就会被放置到指定的范围中作为替换。当您要删除命名范围时,请运行deleteNamedRange。
测试:
当运行上述脚本时,将获得以下结果。

参考资料:
https://stackoverflow.com/questions/71023570
复制相似问题