google-apps-script - 插入格式化文本后如何以编程方式重置格式
问题描述
我有一个将格式化文本插入文档的脚本。有没有办法以某种方式隔离插入文本的格式,以便当用户之后键入“普通”文本时会继承自定义格式?
这是文档脚本的完整代码:
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
并且退格键按下时(5
被退格键删除。),当您从这里插入新文本时,文本具有正常的文本格式。
- 插入文本
尽管我测试了几种方法,但不幸的是,我无法复制使用脚本按下退格键的情况。在上面的示例情况下,当光标放在右边
5
并且5
被脚本删除时,文本格式不能从自定义格式改变。当我看到您的示例 GIF 动画时,在您运行脚本并添加了格式化文本后,您似乎放置了一个空格并插入了一个文本。如果可以使用这种情况,我认为可以建议一种解决方法。
在这个答案中,我想建议解决方法。在此解决方法中,当插入格式化文本时,会添加一个空格,该空格具有插入自定义格式之前的文本格式。这样,在脚本运行后插入新文本时,可以插入脚本运行前的文本格式的文本。
当此解决方法反映到您的脚本时,它变为如下。
修改后的脚本:
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);
}
- 在此解决方法中,使用以下流程。
- 复制光标的文本格式。
- 当
###
被插入时," "
这是一个空格被添加。 - 插入
###
光标并更改光标位置。 - 将复制的文本格式粘贴
###
.- 这样,文本格式被重置。
结果:
参考:
推荐阅读
- ssh - 使用代理:命令行:第 0 行:错误的配置选项:ProxyUseFdpass?
- php - Laravel 7 过滤器
- c - C 执行的文件在 linux 服务器上不能按预期工作
- c# - 从 MSMQ 接收时,什么会导致“无法导入事务”错误?
- c# - 如何用新对象列表实例化列表
- scala - 如何使用 SDK 使 Scala 代码在 EMR 集群上运行?
- php - 如何在 laravel 6 上上传图片?
- r - 如何将文件夹中的多个excel文件导入并转换为R中的数据框
- r - 使用 R 中的 tidymodel 框架进行随机森林超参数调整的错误
- python - Django 在 ModelForm 中的“其他”模型上包含 ManyToManyField