1

我有一张Google Drive有两张纸的电子表格。

Sheet 1有三列:name, date,type

Sheet 2也有三列:name, date,proposed

我想编写一个脚本,该脚本将在我编辑任一工作表并突出显示proposedSheet 2如果满足条件)时运行。

该脚本应取名称Sheet 2并在Sheet 1. 然后从这些记录中,找到具有特定type(在本例中为“Last Date”)的记录,并从这些行中返回MAX()日期。如果该日期与 中的proposed列匹配Sheet 2,则突出显示proposed

proposed如果匹配,我已经能够着色,但我需要帮助根据上述标准date输入正确的日期。date

Sheet 2 date编写公式以从中获取所需数据是否更好/可能Sheet 1?或者,我是否需要proposed在更改为 后编写脚本来填充列Sheet 1

对于任何一种/两种情况,我该怎么做?我的搜索都没有帮助我到达那里。

我曾尝试编写这样的单元格公式:=arrayformula(IF('Sheet 1'!C2:C500="Last Date",min(ROW('Sheet 1'!C2:C500)),""))以及许多变体,但都没有产生我需要的结果。

我可以很容易地把它写在 中Excel,但无法找出Google Drive等价物。这是一种方法Excel

=MAX(IF(2name=1nameRage, IF(1typeRange = "Last Date",1dateRange)))

这是我检查名称并调用相关函数的函数。

function onEdit(e){
   var sheet = SpreadsheetApp.getActiveSheet().getSheetName();
   if(sheet.toString()=="Sheet 2"){
      dataCheck(e);
   }else if(sheet.toString()=="Sheet 1"){
      colorItems("Sheet 2","dataRange");
   }
} 
function dataCheck(e){
   var col = e.range.getColumn();
   if(col==2){
      var row = e.range.getRow();
      var cell = SpreadsheetApp.getActiveSheet().getRange(row,col);
      var bgc = cell.getBackground();
      var cProp = cell.getValue();
      var cLast = SpreadsheetApp.getActiveSheet().getRange(row,col+1).getValue();
      if(cLast.toString()==cProp.toString() && cProp.toString()!=""){
          cell.setBackgroundRGB(190, 190, 190);
      }else if (bgc=="#bebebe"){
          cell.setBackgroundRGB(255, 255, 255);
      }
   }
}
function colorItems(sheetName,nameRange){
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName(sheetName);
    var data = sheet.getDataRange();
    var numRows = data.getNumRows();

    var pDates = ss.getRangeByName(nameRange);

    var pDateObject = getRowsData(sheet, pDates);

    for (var i = 0; i <= numRows; i++) {
        var cell = sheet.getRange(i+2, 2, 1, 1);
        var cLast = pDateObject[i].last;
        var cProp = pDateObject[i].proposed;
        if(!isCellEmpty(cProp)){
           if(cLast.toString() ==cProp.toString()){
              cell.setBackgroundRGB(190, 190, 190);
           }
        }else{
           cell.setBackgroundRGB(255, 255, 255);
        }
    }
}
4

1 回答 1

1

具有讽刺意味的是,我通过复制我的 Excel 公式找到了它:

=arrayformula(MAX(IF('Sheet 1'!C2:C500="Last Date",IF(D2='Sheet 1'!A2:A500,'Sheet 1'!B2:B500))))
于 2013-07-20T02:01:23.267 回答