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

修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:35:53