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

如何规避Google Apps Script中的undefined错误?非空行分组脚本求助

问题排查与脚本修改

核心问题分析

原脚本直接调用getRowGroup(i, 1).getDepth()时,若当前行未创建分组,Google Apps Script会抛出异常而非返回undefined,这导致脚本直接终止,无法执行后续的条件判断。此外原逻辑在分组范围的选取上也存在偏差,会导致分组起始行错误。

修改后的脚本

function Grouping() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastRow = sheet.getLastRow();
  let count = 0;
  let firstNonEmptyRow = 0;

  // 遍历所有行,从第1行开始(原脚本从第2行开始会漏掉首行非空的情况)
  for (let i = 1; i <= lastRow; i++) {
    const curCellValue = sheet.getRange(i, 1).getValue();
    const nextCellValue = i < lastRow ? sheet.getRange(i + 1, 1).getValue() : "";
    
    // 用try-catch捕获无分组时的异常,判断当前行是否已分组
    let isRowGrouped = false;
    try {
      const rowGroup = sheet.getRowGroup(i, 1);
      if (rowGroup && rowGroup.getDepth() >= 1) {
        isRowGrouped = true;
      }
    } catch (e) {
      // 无分组时会进入catch,标记为未分组
      isRowGrouped = false;
    }

    // 仅处理未分组的行
    if (!isRowGrouped) {
      // 记录连续非空行的起始行
      if (curCellValue !== "" && count === 0) {
        firstNonEmptyRow = i;
        count = 1;
      } 
      // 累加连续非空行的数量
      else if (curCellValue !== "") {
        count++;
      }

      // 当遇到空行或到达最后一行,且存在连续非空行时,执行分组
      if ((curCellValue === "" || i === lastRow) && count > 0) {
        // 分组范围:从起始行的下一行开始,到当前行的前一行(如果当前行是空行)
        // 若到达最后一行且当前行非空,则分组范围是起始行到当前行
        const startRow = firstNonEmptyRow + 1;
        const groupRowsCount = i === lastRow && curCellValue !== "" ? count - 1 : count - 1;
        
        // 确保分组行数大于0再执行操作
        if (groupRowsCount > 0) {
          sheet.getRange(startRow, 1, groupRowsCount).shiftRowGroupDepth(1);
        }
        
        // 重置计数器
        count = 0;
        firstNonEmptyRow = 0;
      }
    }
  }
}

关键修改点

  • 异常处理:用try-catch包裹getRowGroup调用,捕获无分组时的异常,避免脚本终止。
  • 逻辑修正:
    • 从第1行开始遍历,避免漏掉首行非空的情况;
    • 调整分组范围的计算逻辑,确保分组的是连续非空行的子行(符合常规分组习惯,即首行作为组标题,下方行折叠);
    • 增加边界判断,处理最后一行非空的场景。
  • 性能优化:提前获取当前工作表对象,避免重复调用getActiveSheet()或getActiveSpreadsheet(),提升脚本执行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:23:05