添加匹配对象的数量

时间:2015-06-24 21:01:58

标签: google-apps-script google-sheets

这是我的代码if语句似乎永远不会是真的,但我不知道它有什么问题。我也试过更换'(" A" + currentRow)'与'(" A:A")'

function addAllValues() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(),
      sheet = ss.getSheetByName("Form Responses 1"),
      type = sheet.getRange("B2:B").getValues(),
      length = sheet.getRange("C2:C").getValues(),
      model = sheet.getRange("D2:D").getValues(),
      make = sheet.getRange("E2:E").getValues(),
      specs = sheet.getRange("F2:F").getValues(),
      add = sheet.getRange("G2:G").getValues(),
      quantity = sheet.getRange("H2:H").getValues(),
      currentRow = SpreadsheetApp.getActiveSheet().getActiveSelection().getRowIndex(),
      i=0,
      value=0;

    do{
      if(type == ("A" + currentRow) && length == ("B" + currentRow) && model == ("C" + currentRow) && make == ("D" + currentRow) && specs == ("E" + currentRow))
      {
        if(add == "add"){ value = value + quantity}else{ value = value - quantity}
      }
      i++;
    }while(type[i] != "")
  return value;

}

此功能的目的是查看一个工作表并添加所有匹配项以更新另一个工作表的数量。任何帮助,将不胜感激。谢谢

2 个答案:

答案 0 :(得分:1)

让我们看一下比较的一部分......

if(type == ("A" + currentRow) ...

以下是type的声明方式:

type = sheet.getRange("B2:B").getValues()

这意味着type是一个二维数组值,或一行数组,其中每一行是一个单元格数组...在这种情况下只有一个单元格宽。它可能是这样的:

[ [4],
  [34],
  [23] ]

我们将type("A" + currentRow)进行比较的值为currentRow = SpreadsheetApp.getActiveSheet().getActiveSelection().getRowIndex() 。变量就像这样声明:

"A" + currentRow

...这将是一个数字。表达式A5会将该数字强制转换为字符串,产生类似if的内容(假设光标当前位于第5行)。

比较是检查二维数组是否等于一个简单的字符串......它永远不会。

再次完成比较,确保您正在比较您真正想要的值。要调试这样的长{{1}}语句,请将其分成不同的部分,并单独遍历每个部分,以确保正确使用它。

答案 1 :(得分:0)

感谢Mogsdad,我能够让它发挥作用。这是工作脚本

`function addAllValues() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(),
      sheet = ss.getSheetByName("Form Responses 1"),
      type = sheet.getRange("B2:B").getValues(),
      length = sheet.getRange("C2:C").getValues(),
      model = sheet.getRange("D2:D").getValues(),
      make = sheet.getRange("E2:E").getValues(),
      specs = sheet.getRange("F2:F").getValues(),
      add = sheet.getRange("G2:G").getValues(),
      quantity = sheet.getRange("H2:H").getValues(),
      currentRow = SpreadsheetApp.getActiveSheet().getActiveSelection().getRowIndex(),
      i=0,
      value=0;
 //var hi = ss.getRange("A" + currentRow).getValue()
    do{
      if(type[i] == ss.getRange("A" + currentRow).getValue() && length[i] == ss.getRange("B" + currentRow).getValue() && model[i] == ss.getRange("C" + currentRow).getValue() && make[i] == ss.getRange("D" + currentRow).getValue() && specs[i] == ss.getRange("E" + currentRow).getValue())
      {

        if(add[i] == "add"){value = parseInt(value,10) + parseInt(quantity[i],10)}else{ value = parseInt(value,10) - parseInt(quantity[i], 10)}
      }
      i++;
    }while(type[i] != "")
  return value;

}`