如何修改Excel Script实现从C列开始遍历所有列统计着色单元格?
修改后的Excel Script:遍历所有列统计同填充色单元格数量
以下是修改后的脚本,实现从C列开始遍历工作表所有列,完成指定区域的同填充色单元格统计:
function main(workbook: ExcelScript.Workbook) { let selectedSheet = workbook.getWorksheet("Sheet1"); // 获取工作表使用的最后一列索引(从0开始计数) let lastColIndex = selectedSheet.getUsedRange().getLastColumn(); // 从C列(索引2)开始遍历所有列 for (let colIndex = 2; colIndex <= lastColIndex; colIndex++) { // ------------------- 统计Day区域(对应第9行单元格的填充色) ------------------- // 获取Day统计的顶部单元格(第9行,当前列) let dayTopCell = selectedSheet.getCell(8, colIndex); let dayColorCode = dayTopCell.getFormat().getFill().getColor(); // 获取Day统计区域:第26行到第59行,当前列 let dayRange = selectedSheet.getRangeByIndexes(25, colIndex, 34, 1); // 25是行索引(对应26行),34是行数(59-26+1=34) let dayCount = dayRange.getCellCount(); let dayCounter = 0; for (let i = 0; i < dayCount; i++) { if (dayRange.getCell(i, 0).getFormat().getFill().getColor() === dayColorCode) { dayCounter++; } } // 将统计结果写入顶部单元格 dayTopCell.setValue(dayCounter); // ------------------- 统计Night区域(对应第10行单元格的填充色) ------------------- // 获取Night统计的顶部单元格(第10行,当前列) let nightTopCell = selectedSheet.getCell(9, colIndex); let nightColorCode = nightTopCell.getFormat().getFill().getColor(); // 获取Night统计区域:第60行到第70行,当前列 let nightRange = selectedSheet.getRangeByIndexes(59, colIndex, 11, 1); // 59是行索引(对应60行),11是行数(70-60+1=11) let nightCount = nightRange.getCellCount(); let nightCounter = 0; for (let j = 0; j < nightCount; j++) { if (nightRange.getCell(j, 0).getFormat().getFill().getColor() === nightColorCode) { nightCounter++; } } // 将统计结果写入顶部单元格 nightTopCell.setValue(nightCounter); } }
关键改动说明
- 动态列遍历:通过
getUsedRange().getLastColumn()获取工作表最后一列索引,从C列(索引2)开始循环处理每一列 - 替换硬编码引用:将原脚本中固定的C列(如
"C9"、"C26:C59")替换为基于列索引的动态区域获取,使用getCell和getRangeByIndexes实现跨列复用 - 修复原脚本bug:修正了原脚本中Night统计循环误用
dayCount的错误,改为使用nightCount - 代码结构优化:将每列的Day、Night统计逻辑封装在循环内,避免重复代码
内容的提问来源于stack exchange,提问作者htester
相关产品推荐
相关产品推荐

