繁体   English   中英

根据其他行中单元格中的值有条件地编辑单元格 - 使用 Google Script 的 Google Sheet

[英]Conditionally edit cells based of the value in cells in other rows - Google Sheet using Google Script

我对谷歌脚本的了解有限,我每天都在努力变得更好。 我正在尝试根据其他行中包含的单元格中的值有条件地设置 2 个单元格的值。 我有一个样本表( 这里) ,上面有约会。 您还将在 output 表上看到所需的 output。

当同一个人根据他的 email 地址进行两个或多个约会时,我想在重复的列中为每个重复的约会写“是”,但最近的约会(基于 E 列,即约会创建的日期)并且大于当前日期(如果约会已经过去,则无需执行任何操作)。 我还想将 L 列的值设置为“Not Coming”,这是一个包含我已经在我的主电子表格上自动化的数据验证的单元格。

这是我已经根据在 stackoverflow 上回答的其他问题设计的脚本。 我不太熟悉索引以及如何处理它们。 该脚本运行没有错误,但没有任何反应。

var currentDate = new Date()

// Master

var sheetMaster = ss.getSheets()[0];
var allValues=sheetMaster.getRange(2,1,sheetMaster.getLastRow()-1,sheetMaster.getLastColumn()).getValues();
var emailValues=sheetMaster.getRange(2,3,sheetMaster.getLastRow()-1,3).getValues();
var dateCreatedAtValues=sheetMaster.getRange(2,5,sheetMaster.getLastRow()-1,5).getValues();
var duplicateColumn=sheetMaster.getRange(2,11,sheetMaster.getLastRow()-1,11);

var eM=[];//emails
var dA=[];//dates
var eR=[];//entire rows
var dC=[];//duplicateColumn Yes or empty 

function analyzeDuplicateEntries() {
  
  for(var i=0;i<emailValues.length;i++) {
    var idx=eM.indexOf(emailValues[i][0]);
    if(idx==-1) {
      eM.push(emailValues[i][0]);
      dA.push(dateCreatedAtValues[i][0]);
      eR.push(allValues[i]);
      }
    else if(new Date(dateCreatedAtValues[i][0]).valueOf() > new Date(dA[idx]).valueOf() && new Date(dateCreatedAtValues[i][0]).valueOf()> currentDate) {
     duplicateColumn[i][0].setValue("Yes");
    }
    }
} ```

您正在检索错误的列并将值错误地设置为范围单元格

  • var mailValues=sheetMaster.getRange(2,3,sheetMaster.getLastRow()-1,3).getValues(); 将返回第 3 到 5 列(请参阅文档,而您的电子邮件位于 B 列,即第 2 列。
  • 注意getRange(row, column, numRows, numColumns)中的第一个参数是要检索的列数,而不是最后一列
  • 请注意,要在包含多个单元格的范围内使用setValue ,您需要先使用getCell()检索相应的单元格
  • 因此考虑到单元格索引以1开头(与以 0` 开头的数组索引相反)。

重写代码的一种简单(非最佳)方法是:

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var currentDate = new Date()
  
  // Master
  
  var sheetMaster = ss.getSheets()[0];
  var allValues=sheetMaster.getRange(2,1,sheetMaster.getLastRow()-1,sheetMaster.getLastColumn()).getValues();
  var emailValues=sheetMaster.getRange(2,2,sheetMaster.getLastRow()-1,1).getValues();
  var dateCreatedAtValues=sheetMaster.getRange(2,5,sheetMaster.getLastRow()-1,1).getValues();
  var duplicateColumn=sheetMaster.getRange(2,11,sheetMaster.getLastRow()-1,1);
  
  var eM=[];//emails
  var dA=[];//dates
  var eR=[];//entire rows
  var dC=[];//duplicateColumn Yes or empty 
  
  function analyzeDuplicateEntries() {
    for(var i=0;i<emailValues.length;i++) {
      var idx=eM.indexOf(emailValues[i][0]);
      if(idx==-1) {
        eM.push(emailValues[i][0]);
        dA.push(dateCreatedAtValues[i][0]);
        eR.push(allValues[i]);
        }
      else if(new Date(dateCreatedAtValues[i][0]).valueOf() > new Date(dA[idx]).valueOf() && new Date(dateCreatedAtValues[i][0]).valueOf()> currentDate) {
       duplicateColumn.getCell(i+1, 1).setValue("Yes");
      }
      }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM