【问题标题】:Cell.getValue is not comparing values correctlyCell.getValue 没有正确比较值
【发布时间】:2020-05-25 17:44:57
【问题描述】:

我是 google 应用程序脚本的新手,我遇到了问题。当我尝试将单元格值与两个整数进行比较时,它每次都有效。在我的电子表格中,只有少数几个值符合这些约束条件。这是我的代码:

  function CHECK_CORRELATION() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    var rangeData = sheet.getDataRange();
    var lastColumn = rangeData.getLastColumn();
    var lastRow = rangeData.getNumRows();
    var counter = 0;
    var counter2 = 0;
    var values = rangeData.getValues()
    for (var j = 2; j <= lastRow; j++){
      var cell = sheet.getRange(j, 8)
      if (cell.isBlank()) {
        continue;
      } else {
        if (0.9<=cell.getValue()<=1.1){
          Logger.log(cell.getValue());
          counter++;
        }
        counter2++;
      }
    }
    Logger.log(counter)
    Logger.log(counter2)
    if (counter>(counter2/2)) {
      return "The idea that a student will have motivation and has a part time job co-occur"
    } else {
      return "The idea that a student will have motivation and has a part time job does not co-occur"
    }
  }

This is the logger

它显示 counter 是 62 并且 counter2 是 62,即使它不应该是。

任何帮助将不胜感激!

【问题讨论】:

    标签: javascript if-statement google-apps-script comparison-operators


    【解决方案1】:

    你已经很棒了!我刚刚清理了你的 for 循环。 我假设您的数据在第 8 列,对吧?

    如果这解决了您的问题,请告诉我。

    function CHECK_CORRELATION() 
    {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();
      var lc = sheet.getLastColumn();
      var lr = sheet.getLastRow();
      var rangeData = sheet.getRange(2, 1, lr -1, lc);
      var lastColumn = rangeData.getLastColumn();
      var lastRow = rangeData.getNumRows();
      var counter = 0;
      var counter2 = 0;
      var values = rangeData.getValues();
      
      for (var j = 0; j < values.length; j++)
      {
        var row = values[j];
        var dataToCheck = row[7];
        if ((dataToCheck != "" || dataToCheck != undefined) && dataToCheck >= 0.9 && dataToCheck <= 1.1)
        {
          counter++;
          }
          else
          {
            counter2++;
          }
          
        }
      
      Logger.log(counter)
      Logger.log(counter2)
      if (counter>(counter2/2)) 
      {
        return "The idea that a student will have motivation and has a part time job co-occur"
      } 
      else 
      {
        return "The idea that a student will have motivation and has a part time job does not co-occur"
      }
    }

    【讨论】:

    • 非常感谢,这非常有效。我只有几个问题。为什么要做 lr-1,为什么要检查 dataToCheck 是否未定义?这是否意味着它是一个除以0的整数?
    • 很高兴听到! getLastRow 返回数据集中的最后一行。因此,如果您有一个标题和 62 行数据,getLastRow 返回 63。但在这种情况下,我们希望它仅循环遍历数据,因此标题为 -1。 'dataToCheck != undefined' 可能有点矫枉过正,但由于我过去曾为此苦苦挣扎,因此我几乎会自动检查 undefined 以确保确定。当然,您可以将其排除在外,可能不会对您产生太大影响。
    【解决方案2】:

    这个表达式不像你想的那样工作:

    0.9<=cell.getValue()<=1.1
    

    上面是因为&lt;= 是一个需要两个操作数的conditional operator,所以表达式将第一次比较的结果(真或假)与一个数字进行比较。

    尝试将上面的表达式替换为

    0.9 <= cell.getValue() && cell.getValue() <= 1.1
    

    &amp;&amp;logical operator AND

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多