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

如何用Google Apps Script在Google Docs中正确拆分项目符号并消除空行?

解决Google Docs文本转无空行项目符号列表的自动化方案

针对你遇到的问题——将连续的•分隔文本转换为无空行的项目符号列表,直接用replaceText替换换行符的方式不可靠,原因在于Google Docs对软换行(\n)和硬换行(\r\n)的处理逻辑不同:

  • 软换行属于同一段落的行内换行,添加项目符号时只会给整个段落加一个符号;
  • 硬换行会生成独立段落,默认段落间距会导致空行,且手动调整效率低。

以下是两种可靠的Google Apps Script解决方案:

方案1:批量处理文档中所有符合格式的段落

该脚本会遍历文档所有段落,自动识别包含•的文本块,转换为无空行的项目符号列表:

function convertToBulletList() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var paragraphs = body.getParagraphs();
  
  // 倒序遍历避免删除段落导致的索引错乱
  for (var i = paragraphs.length - 1; i >= 0; i--) {
    var para = paragraphs[i];
    var text = para.getText();
    
    if (text.includes('•')) {
      // 分割文本,清理空白并过滤空内容
      var listItems = text.split('•')
                          .map(item => item.trim())
                          .filter(item => item.length > 0);
      
      // 删除原段落
      body.removeChild(para);
      
      // 逐个插入带项目符号的段落
      listItems.forEach(item => {
        var newPara = body.insertParagraph(i, item);
        newPara.setBullet(DocumentApp.Bullet.DISC); // 使用默认圆点符号
        i++; // 插入后更新索引,确保后续项位置正确
      });
    }
  }
}

方案2:仅处理选中的文本块

如果只想转换文档中选中的部分文本,使用以下脚本更灵活:

function convertSelectedToBulletList() {
  var doc = DocumentApp.getActiveDocument();
  var selection = doc.getSelection();
  
  if (!selection) {
    DocumentApp.getUi().alert('请先选中需要转换的文本');
    return;
  }
  
  var elements = selection.getSelectedElements();
  // 倒序处理选中元素,避免插入/删除操作打乱索引
  for (var i = elements.length - 1; i >= 0; i--) {
    var element = elements[i];
    var para = element.getElement().asParagraph();
    
    if (element.isPartial()) {
      // 处理部分选中的段落
      var startOffset = element.getStartOffset();
      var endOffset = element.getEndOffsetInclusive();
      var selectedText = para.getText().substring(startOffset, endOffset + 1);
      
      var listItems = selectedText.split('•')
                                  .map(item => item.trim())
                                  .filter(item => item.length > 0);
      
      // 删除选中的文本片段
      para.deleteText(startOffset, endOffset);
      
      // 插入新的列表项
      listItems.forEach(item => {
        var newPara = para.getParent().insertParagraph(para.getParent().getChildIndex(para) + 1, item);
        newPara.setBullet(DocumentApp.Bullet.DISC);
      });
    } else {
      // 处理完整选中的段落
      var text = para.getText();
      var listItems = text.split('•')
                          .map(item => item.trim())
                          .filter(item => item.length > 0);
      
      var parent = para.getParent();
      var index = parent.getChildIndex(para);
      
      // 删除原段落
      parent.removeChild(para);
      
      // 插入列表项
      listItems.forEach(item => {
        var newPara = parent.insertParagraph(index, item);
        newPara.setBullet(DocumentApp.Bullet.DISC);
        index++;
      });
    }
  }
}

使用说明

  1. 打开目标Google Docs文档,点击「扩展程序」→「Apps Script」;
  2. 粘贴上述任意脚本,保存并运行(首次运行需要授权);
  3. 方案2需要先选中目标文本再执行脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:17:32