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,满足排序需求。
- 跳过空行:
- 用
getLastRow()替代getMaxRows(),只处理到表格有数据的最后一行,不再处理无数据的空行。 - 新增判断逻辑:如果目标列(
colorCol)的单元格为空,就写入空值,不生成编号。 - 加了边界判断,避免表格无数据时出现报错。
- 用
- 简化逻辑:把原脚本中单独判断白色的分支去掉,统一用
colorIndex + 1处理调色板内所有颜色,代码更简洁。
内容的提问来源于stack exchange,提问作者HSHO
相关产品推荐
相关产品推荐

