修改Google Apps Script:按列值设置文本格式并隐藏目标列
Google Apps Script 修改实现:高亮需求行与隐藏Status列
以下是修改后的完整脚本,已实现指定的两个需求:
//this creates the trip schedule to use during a rotation meeting. choose the dates and check the box. Script //does everything else function onEdit(e) { var editedValue = e.value; var editedSheet = e.range.getSheet().getName(); var sheet2Watch = "RotationList"; if (editedSheet !== sheet2Watch || editedValue !== "TRUE") { return; } createRotationSchedule(); } function createRotationSchedule() { var tripSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("RotationList"); // 清理旧数据 var numOfRowsData = tripSheet.getLastRow() - 3; if (numOfRowsData < 1) { tripSheet.insertRowsAfter(3, 10); } else { tripSheet.deleteRows(4, numOfRowsData); } // 获取日期范围 var startDate = tripSheet.getRange("A1").getValue(); var endDate = tripSheet.getRange("B1").getValue(); // 获取Data表数据 var dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data"); var aVals = dataSheet.getRange("A2:A").getValues(); var aLast = aVals.filter(String).length; var dataRange = dataSheet.getRange(2, 1, aLast, 9); var data = dataRange.getValues(); var dates = data.map(function(e){return e[0]}); var tripArray = []; var blankRow = ["","","","","","","","",""]; // 记录需要高亮的行索引(在tripArray中的位置) var highlightRows = []; for (var i=0; i<dates.length; i++){ if ((dates[i].valueOf() >= startDate.valueOf()) && (dates[i].valueOf() <= endDate.valueOf())) { // 判断当前行是否需要高亮(Status列值为'I need a driver',假设Status是第9列,索引8) var needHighlight = data[i][8] === 'I need a driver'; if (i === 0) { var dateHeader = [dates[i],"","","","","","","",""]; tripArray.push(blankRow); tripArray.push(dateHeader); var rowData = [...data[i]]; // 移除Status列(第9列,索引8) rowData.splice(8, 1); // 替换日期为空 rowData.splice(0, 1, ''); for (var b=0; b<data[i][2]; b++){ tripArray.push(rowData); // 如果需要高亮,记录当前tripArray的最后一行索引 if (needHighlight) { highlightRows.push(tripArray.length - 1); } } continue; } if (i > 0 && dates[i-1].valueOf() === dates[i].valueOf()) { var rowData = [...data[i]]; rowData.splice(8, 1); rowData.splice(0, 1, ''); for (var b=0; b<data[i][2]; b++){ tripArray.push(rowData); if (needHighlight) { highlightRows.push(tripArray.length - 1); } } continue; } if (i > 0) { var dateHeader = [dates[i],"","","","","","","",""]; tripArray.push(blankRow); tripArray.push(dateHeader); var rowData = [...data[i]]; rowData.splice(8, 1); rowData.splice(0, 1, ''); for (var b=0; b<data[i][2]; b++){ tripArray.push(rowData); if (needHighlight) { highlightRows.push(tripArray.length - 1); } } continue; } } } tripArray.push(blankRow); // 写入数据到RotationList,注意列数改为8(去掉了Status列) var targetRange = tripSheet.getRange(4, 1, tripArray.length, tripArray[0].length); targetRange.setValues(tripArray).setFontWeight("normal").setBackground(""); // 应用高亮样式 highlightRows.forEach(function(index) { var sheetRow = 4 + index; tripSheet.getRange(sheetRow, 1, 1, tripArray[0].length) .setFontWeight("bold") .setFontColor("#ff0000"); }); // 格式化日期行 tripSheet.getRange(4, 1, tripArray.length, 1).setFontWeight("bold").setHorizontalAlignment("left"); // 合并日期行(列数改为8) var lc = 8; var tripDates = tripSheet.getRange(4, 1, tripArray.length).getValues(); for (var i=0; i<tripDates.length; i++){ var row = 4 + i; if (typeof(tripDates[i][0]) !== "string"){ tripSheet.getRange(row, 1, 1, lc).setBackground("#d5d7e0").mergeAcross(); } } // 隐藏RotationList中的Status列(如果原表有第9列) tripSheet.hideColumns(9); }
关键修改说明:
- 移除Status列并标记高亮行:在构建每行数据时,通过
rowData.splice(8, 1)移除Status列(假设Data表中Status是第9列,索引为8),同时判断该行Status值是否为'I need a driver',将需要高亮的行索引存入highlightRows数组。 - 应用高亮样式:写入数据后,遍历
highlightRows数组,对对应行设置加粗红色字体。 - 隐藏Status列:脚本末尾调用
tripSheet.hideColumns(9)隐藏RotationList中的第9列(即原Status列的位置)。 - 调整列数逻辑:所有涉及列数的操作(如合并行、数据写入范围)从原9列改为8列,匹配移除Status列后的结构。
内容的提问来源于stack exchange,提问作者vlkirkpatrick
相关产品推荐
相关产品推荐

