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
错误原因与修正方案
错误原因
setBold方法参数使用错误:该方法的合法签名只有两种——要么传入(起始偏移量, 是否粗体)设置单个位置,要么传入(起始偏移量, 结束偏移量(包含), 是否粗体)设置一段范围,你当前传入的四个参数不符合任何一种签名。- 用纯文本拆分出的行号
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
相关产品推荐
相关产品推荐

