用于检查值的Google云端电子表格公式

时间:2013-07-20 00:59:45

标签: google-apps-script google-sheets google-drive-api

我有一张Google Drive电子表格,上面有两张。

Sheet 1有三列:namedatetype

Sheet 2还有三列:namedateproposed

我想编写一个脚本,该脚本将在我编辑任何工作表时运行,并在proposed上突出显示Sheet 2(如果符合条件)。

脚本应采用Sheet 2中的名称,并在Sheet 1上查找所有相关记录。然后从这些记录中找到具有特定type(在这种情况下为“上次日期”)的那些记录,并从这些行返回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);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

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

=arrayformula(MAX(IF('Sheet 1'!C2:C500="Last Date",IF(D2='Sheet 1'!A2:A500,'Sheet 1'!B2:B500))))