首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Google脚本同一行中的多个条件和前一行中的值的验证

Google脚本同一行中的多个条件和前一行中的值的验证
EN

Stack Overflow用户
提问于 2018-06-01 14:22:01
回答 1查看 523关注 0票数 0

我从一个脚本开始,这里的某个人很热情地帮助了我,并且需要在它的基础上进行构建,而不知道从哪里开始。下面是当前的脚本:

代码语言:javascript
复制
function yourFunction(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet1');
var rg=sh.getDataRange();//columns are fruit,status and then cost.
var vA=rg.getValues();
for(var i=1;i<vA.length;i++){
 if(vA[i][0].toString()=='Apple' && vA[i][1].toString()=='Ripe' && vA[i][2].toString=='Large' && vA[i][4].toString=''){
  vA[i][4]=5.5;
  }
 }
  rg.setValues(vA);//This writes all of the data at one time.
}

我想要添加的是第二组标准,它查看另一个列值=批号(D列)。假设当前批号与前一行的批号相同,并且上面的所有内容都匹配,则每个额外的行将是设定值3。但是,如果当前行之前的批号的值不相同,则该值为5。在我读到的内容中,可能需要有一些循环条件,这样计算就不会一直进行下去。这里的任何帮助都将不胜感激。谢谢!

以下是指向电子表格Test Script的基本格式的链接

EN

回答 1

Stack Overflow用户

发布于 2018-06-02 17:39:08

下面是一个更新的函数,它演示了我相信您正在描述的一般方法。

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

运行此函数后,此工作表如下所示:

代码语言:javascript
复制
+--------+-----------+--------+------------+------+-----------+
| Fruit  |  Status   |  Size  | Lot Number | Cost | New Value |
+--------+-----------+--------+------------+------+-----------+
| Apple  | Ripe      | Large  |        101 |  5.5 |         5 |
| Apple  | Ripe      | Medium |        101 |  5.5 |         3 |
| Apple  | Ripe      | Large  |        103 |  5.5 |         5 |
| Apple  | Not Ready | Large  |        102 |      |         5 |
| Apple  | Not Ready | Medium |        101 |      |         5 |
| Banana | Ripe      | Large  |        201 |      |         5 |
| Orange | Ripe      | Large  |        301 |      |         5 |
| Orange | Not Ready | Medium |        301 |      |         3 |
| Pear   | Ripe      | Large  |        401 |      |         5 |
+--------+-----------+--------+------------+------+-----------+

以下是一些注意事项:

  • use descriptive variable names
  • 使用一组常量为列提供描述性名称
  • for您的ask,您所需要做的就是使用一个变量来存储以前的行批号,不需要额外的循环复杂性
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50637204

复制
相关文章

相似问题

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