更新Google Sheets脚本:为热图表格动态添加单元格批注
需求说明:动态为Google Sheets热图单元格添加多字段批注
现有Google Sheets脚本可将指定行、列及DBH数据复制到热图表格,现需更新该流程,参照示例单元格批注样式,为对应单元格动态添加ID、DBH及其他潜在数据字段。
我已基于原回答完成更新,添加了变量替换和注释,效果良好,最终代码如下:
function test1() { try { // 数据列顺序要求:行号、列号、DBH、ID、可选字段1... let MY_LAST_COL = 4; // 填写数据区域的最后一列编号 let MY_ROWS_COLUMNS_TEXT = 6; // 热图中显示"行号&列号"文本的列编号 let MY_ROWS_COLUMNS_NBR = 7; // 热图中开始显示列号的起始列编号 let spread = SpreadsheetApp.getActiveSpreadsheet(); let sheet = spread.getSheetByName("mysitenotes"); // 填写目标工作表名称 // 获取数据区域(排除表头) let values = sheet.getRange(2,1,sheet.getLastRow()-1,MY_LAST_COL).getValues(); // 提取所有行号并去重 let rows = values.map( row => row[0] ); rows = [...new Set(rows)]; // 计算最大行号 let maxRow = 0; rows.forEach( row => { maxRow = row > maxRow ? row : maxRow } ); // 提取所有列号并去重 let columns = values.map( row => row[1] ); columns = [...new Set(columns)] // 计算最大列号 let maxColumn = 0; columns.forEach( column => { maxColumn = column > maxColumn ? column : maxColumn } ); // 初始化DBH数据数组和批注数组 let dbh = []; let notes = []; for( let i=0; i<maxRow; i++ ) { dbh.push(Array(maxColumn).fill("")); notes.push(Array(maxColumn).fill("")); dbh[i].unshift(i+1); // 添加行号前缀 } // 填充DBH数据和批注内容 values.forEach( row => { let i = row[0]-1; let j = row[1]; dbh[i][j] = row[2]; // 自定义批注格式:可根据需要添加更多字段 notes[i][j-1] = "ID: "+row[3]+ "\nDBH: "+row[2]; // 批注内容结束 } ); console.log(notes); // 添加热图表头 dbh.unshift(Array(maxColumn).fill(0)); dbh[0].forEach( (cell,index) => dbh[0][index] = index+1 ); dbh[0].unshift("行号&列号"); // 将DBH数据写入热图区域 sheet.getRange(1,MY_ROWS_COLUMNS_TEXT,dbh.length,dbh[0].length).setValues(dbh); // 将批注应用到对应单元格 sheet.getRange(2,MY_ROWS_COLUMNS_NBR,notes.length,notes[0].length).setNotes(notes); } catch(err) { console.log("test函数执行错误: "+err) } }
关键更新说明
- 新增可配置变量,方便快速调整数据列范围、热图起始位置
- 批注支持灵活扩展:如果需要添加更多字段,只需在
notes[i][j-1]的字符串中继续拼接,比如"\n可选字段1: "+row[4]即可 - 保留原逻辑核心功能的同时,提升了代码的可维护性
内容的提问来源于stack exchange,提问作者user1888167
相关产品推荐
相关产品推荐

