如何在插入格式化文本后以编程方式重置格式
How to programatically reset formatting after inserting formatted text
我有一个脚本可以将格式化的文本插入到文档中。有没有办法以某种方式隔离插入文本的格式,以便当用户随后键入“普通”文本时,它会继承自定义格式?
这里是文档脚本的完整代码:
function onOpen (){
DocumentApp.getUi()
.createMenu("repro-formatting")
.addItem("Insert at cursor", "insert")
.addToUi();
}
function insert(){
var doc = DocumentApp.getActiveDocument();
var cursor = doc.getCursor();
if (!cursor) {
return;
}
var value = "###";
var text = cursor.insertText(value);
text.setBold(true);
text.setBackgroundColor("#f9cb9c");
var position = doc.newPosition(text, value.length);
doc.setCursor(position);
}
我相信你的目标如下。
- 您想在使用脚本插入格式化文本后重置文本格式。
问题和解决方法:
插入带格式的文本时,好像光标有光标左边的文本格式。因此,例如,它假设以下情况。
- 插入
12345
的文本。
- 为
1234
的文本提供自定义格式。在这种情况下,5
是默认的文本格式。
- 当光标位于
5
右侧时,当您从此处插入新文本时,文本具有正常文本格式。
- 当光标放在
4
的右侧时,当您从此处插入新文本时,文本具有自定义格式的文本。
- 当光标放在
5
的右边并且按下backspace键时(5
被backspace键删除。) , 当您从此处插入新文本时,文本具有正常文本格式。
虽然我测试了几种方法,但不幸的是,我无法使用脚本复制按回space键的情况。在上面的示例情况下,当光标放在 5
的右侧并且当 5
被脚本删除时,文本格式无法从自定义格式更改。
当我看到你的示例GIF动画时,在你运行添加脚本和格式化文本之后,你似乎放了一个space并插入了一个文本。如果可以使用这种情况,我认为可能会建议一种解决方法。
在此回答中,我想提出解决方法。在此解决方法中,当插入带格式的文本时,会添加一个 space,它具有插入自定义格式之前的文本格式。这样,在脚本为运行之后插入新文本时,可以插入脚本为运行之前的文本格式的文本。
当此解决方法反映到您的脚本中时,它将变成如下。
修改后的脚本:
function insert() {
var doc = DocumentApp.getActiveDocument();
var cursor = doc.getCursor();
if (!cursor) {
return;
}
var format = cursor.getElement().getAttributes();
var value = "###";
value += " ";
var text = cursor.insertText(value);
text.setBold(0, value.length - 1, true);
text.setBackgroundColor(0, value.length - 1, "#f9cb9c");
var position = doc.newPosition(text, value.length);
var t = doc.setCursor(position).getCursor().getElement().asText();
t.setAttributes(t.getText().length - 1, t.getText().length - 1, format);
}
- 在此解决方法中,使用了以下流程。
- 复制光标的文本格式。
- 当插入
###
时,添加了" "
,即space。
- 将
###
插入光标并改变光标位置。
- 将复制的文本格式粘贴到
###
的
。
- 至此,文本格式被重置。
结果:
参考:
我有一个脚本可以将格式化的文本插入到文档中。有没有办法以某种方式隔离插入文本的格式,以便当用户随后键入“普通”文本时,它会继承自定义格式?
这里是文档脚本的完整代码:
function onOpen (){
DocumentApp.getUi()
.createMenu("repro-formatting")
.addItem("Insert at cursor", "insert")
.addToUi();
}
function insert(){
var doc = DocumentApp.getActiveDocument();
var cursor = doc.getCursor();
if (!cursor) {
return;
}
var value = "###";
var text = cursor.insertText(value);
text.setBold(true);
text.setBackgroundColor("#f9cb9c");
var position = doc.newPosition(text, value.length);
doc.setCursor(position);
}
我相信你的目标如下。
- 您想在使用脚本插入格式化文本后重置文本格式。
问题和解决方法:
插入带格式的文本时,好像光标有光标左边的文本格式。因此,例如,它假设以下情况。
- 插入
12345
的文本。 - 为
1234
的文本提供自定义格式。在这种情况下,5
是默认的文本格式。 - 当光标位于
5
右侧时,当您从此处插入新文本时,文本具有正常文本格式。 - 当光标放在
4
的右侧时,当您从此处插入新文本时,文本具有自定义格式的文本。 - 当光标放在
5
的右边并且按下backspace键时(5
被backspace键删除。) , 当您从此处插入新文本时,文本具有正常文本格式。
- 插入
虽然我测试了几种方法,但不幸的是,我无法使用脚本复制按回space键的情况。在上面的示例情况下,当光标放在
5
的右侧并且当5
被脚本删除时,文本格式无法从自定义格式更改。当我看到你的示例GIF动画时,在你运行添加脚本和格式化文本之后,你似乎放了一个space并插入了一个文本。如果可以使用这种情况,我认为可能会建议一种解决方法。
在此回答中,我想提出解决方法。在此解决方法中,当插入带格式的文本时,会添加一个 space,它具有插入自定义格式之前的文本格式。这样,在脚本为运行之后插入新文本时,可以插入脚本为运行之前的文本格式的文本。
当此解决方法反映到您的脚本中时,它将变成如下。
修改后的脚本:
function insert() {
var doc = DocumentApp.getActiveDocument();
var cursor = doc.getCursor();
if (!cursor) {
return;
}
var format = cursor.getElement().getAttributes();
var value = "###";
value += " ";
var text = cursor.insertText(value);
text.setBold(0, value.length - 1, true);
text.setBackgroundColor(0, value.length - 1, "#f9cb9c");
var position = doc.newPosition(text, value.length);
var t = doc.setCursor(position).getCursor().getElement().asText();
t.setAttributes(t.getText().length - 1, t.getText().length - 1, format);
}
- 在此解决方法中,使用了以下流程。
- 复制光标的文本格式。
- 当插入
###
时,添加了" "
,即space。 - 将
###
插入光标并改变光标位置。 - 将复制的文本格式粘贴到
###
的- 至此,文本格式被重置。