Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何在插入格式化文本后以编程方式重置格式化_Google Apps Script_Google Docs - Fatal编程技术网

Google apps script 如何在插入格式化文本后以编程方式重置格式化

Google apps script 如何在插入格式化文本后以编程方式重置格式化,google-apps-script,google-docs,Google Apps Script,Google Docs,我有一个脚本,可以在文档中插入格式化文本。是否有任何方法可以隔离插入文本的格式,以便用户在之后键入“正常”文本时继承自定义格式 以下是文档脚本的完整代码: function onOpen (){ DocumentApp.getUi() .createMenu("repro-formatting") .addItem("Insert at cursor", "insert") .addToUi(); } f

我有一个脚本,可以在文档中插入格式化文本。是否有任何方法可以隔离插入文本的格式,以便用户在之后键入“正常”文本时继承自定义格式

以下是文档脚本的完整代码:

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动画时,在您运行脚本并添加格式化文本之后,似乎您放置了一个空格并插入了一个文本。如果可以使用这种情况,我认为可以建议一种解决方法

在这个回答中,我想提出解决办法。在此解决方法中,插入格式化文本时,将添加一个空间,该空间在插入自定义格式之前具有文本格式。这样,当在脚本运行后插入新文本时,可以插入具有脚本运行前文本格式的文本

当此变通方法反映到脚本中时,它将变成如下所示

修改脚本:
  • 在此解决方案中,使用以下流程。
  • 复制光标的文本格式
  • 当插入
    ##
    时,将添加作为空格的
  • ###
    插入光标并更改光标位置
  • 将复制的文本格式粘贴到
    ##
    • 这样,文本格式被重置
结果:

参考:

    • 我相信你的目标如下

      • 您希望在随脚本插入格式化文本后重置文本格式
      问题和解决方法:
      • 插入格式化文本时,光标似乎具有光标左侧的文本格式。例如,它假设以下情况

      • 插入
        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);
      }