如何用Google Apps Script解决Google Docs列表自定义符号配置异常问题
代码错误点说明
- 1、ListID引用格式错误
代码中直接写paragraphe.setListId(kix.kcly1amq5g58),kix.kcly1amq5g58是字符串类型的列表ID,未包裹在引号中属于未定义变量调用,这行代码实际完全未生效,列表会默认使用数字编号格式,对应第一个异常。 - 2、列表属性调用顺序逻辑错误
使用已有ListID时,该ID本身已经绑定了预设的Glyph样式、缩进等列表规则,在调用setListId之后又执行setGlyphType,会直接破坏当前列表项和原有ListID规则的绑定,系统会自动为这个列表项生成全新的ListID,导致预设的列表规则全部丢失,对应第二、第三个异常。 - 3、选中范围处理逻辑不完整
当前代码仅处理了选中范围的第一个元素,如果选中多段内容转换列表,其余段落不会被处理,也是异常出现的诱因之一。
修正后代码
var doc = DocumentApp.getActiveDocument(); var body = doc.getBody(); var selectionRange = doc.getSelection() ? doc.getSelection().getRangeElements() : null; if(!selectionRange || selectionRange.length === 0) return; // 无选中内容直接退出 // 预设段落样式 var style_T1 = {}; style_T1[DocumentApp.Attribute.HORIZONTAL_ALIGNMENT] = DocumentApp.HorizontalAlignment.LEFT; style_T1[DocumentApp.Attribute.FONT_FAMILY] = 'Arial'; style_T1[DocumentApp.Attribute.FONT_SIZE] = 12; style_T1[DocumentApp.Attribute.BOLD] = true; style_T1[DocumentApp.Attribute.SPACING_AFTER] = 4; style_T1[DocumentApp.Attribute.SPACING_BEFORE] = 24; style_T1[DocumentApp.Attribute.INDENT_FIRST_LINE] = 0; style_T1[DocumentApp.Attribute.INDENT_START] = 30; style_T1[DocumentApp.Attribute.LINE_SPACING] = 1; style_T1[DocumentApp.Attribute.UNDERLINE] = false; // 遍历所有选中段落转换列表 for(var i = 0; i < selectionRange.length; i++) { var element = selectionRange[i].getElement(); // 仅处理段落类型元素 if(element.getType() !== DocumentApp.ElementType.PARAGRAPH) continue; var text = element.getText(); var index = body.getChildIndex(element); body.removeChild(element); var listItem = body.insertListItem(index, text); // 注意ListID加引号,且设置后不要单独修改GlyphType listItem.setListId('kix.kcly1amq5g58'); listItem.setNestingLevel(0); listItem.setAttributes(style_T1); }
修正说明
- 给ListID添加引号,保证ID可以被正常识别调用
- 移除了
setGlyphType调用,避免破坏预设ListID的绑定规则,使用ListID自带的Glyph配置 - 增加了选中范围遍历逻辑,支持批量转换多段内容为列表
- 增加了空选中、非段落元素的判断,避免脚本运行报错
- 如果不需要复用提前预设的列表规则,可删除
setListId调用,保留setGlyphType自定义符号即可,两种设置列表规则的方式不要同时调用,避免冲突。
内容的提问来源于stack exchange,提问作者Rman
相关产品推荐
相关产品推荐

