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

Google Apps Script问题:优化单元格颜色编号的默认色与空行逻辑

修改后的numberColors4脚本(满足白色单元格编号+跳过空行需求)

以下是调整后的脚本,完全匹配你的两个需求:

function numberColors4() {
  
  var colorCol = 1,     
      numberCol = 11,    
      firstDataRow = 2, 

      palette = [
        "#ffffff",  // Default 1
        "#ff9900",  // Orange 2
        "#00b0f0", // Light Blue 3
        "#ffff00", // yellow 4 
        "#93c47d", // Green 5
        "#00ff00", // Light Green 6
        "#9900ff", // Purple 7
        "#ff0000", // Red 8
        "#5f5f5f" // Grey 9     
      ];

  var numbers = [],
      activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'),
      lastRow = activeSheet.getLastRow(),
      dataNumRows = lastRow >= firstDataRow ? lastRow - (firstDataRow - 1) : 0,
      colorColColors = activeSheet.getRange(firstDataRow, colorCol, dataNumRows, 1).getBackgrounds(),
      colorColValues = activeSheet.getRange(firstDataRow, colorCol, dataNumRows, 1).getValues();

  for (var rowIndex in colorColColors) {
    numbers[rowIndex] = [];
    var isEmptyRow = colorColValues[rowIndex][0] === "";
    
    if (isEmptyRow) {
      numbers[rowIndex].push("");
      continue;
    }

    var rowColor = colorColColors[rowIndex].toString(),
        colorIndex = palette.indexOf(rowColor);

    if (colorIndex == -1) {
      numbers[rowIndex].push(rowColor);
    } else {
      numbers[rowIndex].push(colorIndex + 1);
    }
  }
  
  if (dataNumRows > 0) {
    activeSheet.getRange(firstDataRow, numberCol, dataNumRows, 1).setValues(numbers);
  }
}

关键修改点说明

  • 白色单元格编号:原脚本给白色单元格写空值,现在直接按调色板顺序写入编号1,满足排序需求。
  • 跳过空行:
    1. 用getLastRow()替代getMaxRows(),只处理到表格有数据的最后一行,不再处理无数据的空行。
    2. 新增判断逻辑:如果目标列(colorCol)的单元格为空,就写入空值,不生成编号。
    3. 加了边界判断,避免表格无数据时出现报错。
  • 简化逻辑:把原脚本中单独判断白色的分支去掉,统一用colorIndex + 1处理调色板内所有颜色,代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:27:30