首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google Drive电子表格公式用于校验值

Google Drive电子表格公式用于校验值
EN

Stack Overflow用户
提问于 2013-07-20 08:59:45
回答 1查看 1.8K关注 0票数 1

我有一个包含两个工作表的Google Drive电子表格。

Sheet 1有三列:namedatetype

Sheet 2还有三列:namedateproposed

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

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

我已经能够颜色proposed如果date匹配,但我需要帮助获得正确的日期到date的基础上提到的标准。

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

使用其中一种/两种情况时,我该如何操作?我的搜索都没有帮助我做到这一点。

我试过写这样的单元格公式:=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)))

下面是我的函数,用于检查名称并调用相关函数。

代码语言:javascript
复制
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);
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-20 10:01:23

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

代码语言:javascript
复制
=arrayformula(MAX(IF('Sheet 1'!C2:C500="Last Date",IF(D2='Sheet 1'!A2:A500,'Sheet 1'!B2:B500))))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17757589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档