You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script报错:DocumentApp.Text.setBold参数不匹配问题修复

问题描述

用户编写了一段Google Apps Script代码,意图逐行将每行中冒号前的文本设置为粗体,代码如下:

function boldTextInLines() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var text = body.getText();

  var lines = text.split("\n"); 

  for (var i = 0; i < lines.length; i++) {
    var line = lines[i];
    var endPos = line.indexOf(':');
    console.log(endPos);
    
    if (endPos !== -1) {
      
      body.editAsText().setBold(i, 0, endPos, true);
    }else{
      console.log(endPos);
    }
    
  }
}

运行时抛出错误:

Exception: The parameters (number,number,number,(class)) don't match the method signature for DocumentApp.Text.setBold. boldTextInLines @ Kod.gs:14

错误原因与修正方案

错误原因

  1. setBold方法参数使用错误:该方法的合法签名只有两种——要么传入(起始偏移量, 是否粗体)设置单个位置,要么传入(起始偏移量, 结束偏移量(包含), 是否粗体)设置一段范围,你当前传入的四个参数不符合任何一种签名。
  2. 用纯文本拆分出的行号i无法对应文档中实际文本的偏移位置,直接用它作为定位依据会导致文本范围错误。

修正后的代码

function boldTextInLines() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var paragraphCount = body.getNumParagraphs();

  // 遍历文档中的每一个段落(对应视觉上的每一行)
  for (var i = 0; i < paragraphCount; i++) {
    var paragraph = body.getParagraph(i);
    var editableText = paragraph.editAsText();
    var textContent = editableText.getText();
    var colonPosition = textContent.indexOf(':');

    if (colonPosition !== -1) {
      // 设置冒号前的文本为粗体(不含冒号,若要包含则将第二个参数改为colonPosition)
      editableText.setBold(0, colonPosition - 1, true);
    }
  }
}

代码说明

  • 直接遍历文档的段落而非拆分纯文本,确保操作对象是文档中真实存在的行。
  • 对每个段落获取可编辑文本对象,直接在段落内部定位冒号位置并设置粗体范围,避免全局文本偏移的计算误差。
  • 若需要把冒号也设置为粗体,只需将colonPosition - 1改为colonPosition即可。

内容的提问来源于stack exchange,提问作者isil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 01:05:01