Google脚本同一行中的多个条件以及上一行中的值验证

时间:2018-06-01 06:22:01

标签: google-apps-script google-sheets

我从一个脚本开始,有人在这里慷慨地帮助并且需要构建它并且不知道从哪里开始。这是当前的脚本:

call

我想要添加的是第二组标准,它们会查看另一个列值=批号(列D)。假设当前批号与前一行相同并且上述所有匹配,则每个附加行将是设定值3.但是如果当前行之前的批号的值不相同,那么值是5.在我所读过的内容中,可能需要有一些循环条件,因此计算不会继续进行。这里的任何帮助将不胜感激。谢谢!

以下是指向电子表格Test Script

的基本格式的链接

1 个答案:

答案 0 :(得分:0)

这是一个更新的函数,它演示了我相信你所描述的一般方法。

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .Enrich.With(new SimpleClassEnricher())
    .WriteTo.Console(outputTemplate: "{Timestamp:HH:mm:ss} [{Level:u3}] {SourceContext} - {Message:lj}{NewLine}{Exception}")
    .CreateLogger();

运行此功能后,此工作表如下所示:

var COLUMNS = {
  FRUIT: 0,
  STATUS: 1,
  SIZE: 2,
  LOT_NUMBERr: 3,
  COST: 4,
  NEW_VALUE: 5,
}

function updateValues() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet3');
  var range = sheet.getDataRange();
  var values = range.getValues();
  var previousLotNumber = -1;
  for(var i = 1; i < values.length; i++){

    if (values[i][COLUMNS.FRUIT] == 'Apple'
        && values[i][COLUMNS.STATUS] == 'Ripe') {
      values[i][COLUMNS.COST] = 5.5; 
    }

    if (previousLotNumber == values[i][COLUMNS.LOT_NUMBER]) {
      values[i][COLUMNS.NEW_VALUE] = 3;
    } else {
      values[i][COLUMNS.NEW_VALUE] = 5;
    }
    previousLotNumber = values[i][COLUMNS.LOT_NUMBER];
  }
  range.setValues(values);
}

一些注意事项:

  • 使用描述性变量名称
  • 使用一组常量为列提供描述性名称
  • 对于你的问题,你需要做的就是使用一个变量来存储前一行的批号,不需要额外的循环复杂性