首页 > 解决方案 > 插入格式化文本后如何以编程方式重置格式

问题描述

我有一个将格式化文本插入文档的脚本。有没有办法以某种方式隔离插入文本的格式,以便当用户之后键入“普通”文本时会继承自定义格式?

在此处输入图像描述

这是文档脚本的完整代码:

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);
}

标签: google-apps-scriptgoogle-docs

解决方案


我相信你的目标如下。

  • 您希望在使用脚本插入格式化文本后重置文本格式。

问题和解决方法:

  • 插入格式化文本时,光标似乎具有光标左侧的文本格式。因此,例如,它假设以下情况。

    1. 插入文本12345
    2. 1234. 在这种情况下,5是默认的文本格式。
    3. 当光标放在 的右侧时5,当您从此处插入新文本时,文本具有正常的文本格式。
    4. 当光标放在 的右侧时4,当您从此处插入新文本时,该文本具有自定义格式的文本。
    5. 当光标放在右边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);
}
  • 在此解决方法中,使用以下流程。
    1. 复制光标的文本格式。
    2. ###被插入时," "这是一个空格被添加。
    3. 插入### 光标并更改光标位置。
    4. 将复制的文本格式粘贴 ### .
      • 这样,文本格式被重置。

结果:

在此处输入图像描述

参考:


推荐阅读