我在 google docs 中使用模板作为信件,我想通过 App Scripts 自动在信件的(动态)标题之后填写信件。是否有任何最佳做法可以将文本始终设置在同一位置?我尝试使用占位符并替换它。但有时我需要多次替换文本。
问问题
59 次
2 回答
2
我不知道最佳实践,但您可以使用书签。你不能命名它们,但如果你知道,比如说,第 5 个书签是用户名,然后循环浏览书签,当你到达第 5 个时编辑文本。
前:
function myFunction() {
try {
var doc = DocumentApp.getActiveDocument();
var bmarks = doc.getBookmarks();
var position = null;
var i = 0;
for( i=0; i<bmarks.length; i++ ) {
console.log(bmarks[i].getId());
position = bmarks[i].getPosition();
position.insertText("i = "+i)
}
}
catch(err) {
console.log(err);
}
}
后:
于 2022-02-07T20:07:06.643 回答
2
在您的情况下,使用 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
.
测试:
运行上述脚本时,会得到以下结果。
参考:
于 2022-02-08T02:34:32.427 回答