【问题标题】:How to compare values of cells in if condition?如何比较 if 条件下单元格的值?
【发布时间】:2017-11-03 19:09:56
【问题描述】:

它的工作原理如下:确定刚刚编辑的值是“已完成”还是“已取消”。如果为真,请选择上一列中的“时间戳”值。在名为“mainSheet”的不同选项卡中查找“时间戳”。找到后,将该值写入该行的第 59 列。该代码一直有效,直到出现if(sheetCells[i][0]===TimeStamp) 条件,它无法比较单元格并将 i 的值分配给 rowValue。我已经在循环中运行了 Logger,它确实具有相同的值!我在这里遗漏了什么吗?

function onEdit(e){
var completed = "Completed";
var cancelled = "Cancelled"
var s = SpreadsheetApp.getActiveSheet();
var value = s.getActiveCell().getValue();
if(value == completed || value == cancelled){
    var statusColumn = 59, rowValue=0;
    var TimeStamp = SpreadsheetApp.getActiveRange().offset(0,-1).getValue();
    var mainSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");
    var sheetCells = mainSheet.getDataRange().getValues();
    for(var i=1; i<sheetCells.length; i++){
        Logger.log(sheetCells[i][0]+" "+TimeStamp);
        if(sheetCells[i][0]===TimeStamp){
            rowValue = i;
        }
    }
    //sheetCells[rowValue][statusColumn].setValue(value);
    Logger.log(rowValue);
}

}

【问题讨论】:

标签: javascript datetime google-apps-script google-sheets


【解决方案1】:

尝试if(sheetCells[i][0]==TimeStamp),因为 == 运算符将在进行任何必要的类型转换后比较是否相等。 === 运算符不会进行转换,因此如果两个值不同类型 === 只会返回 false。但即使 == 在您的情况下也不起作用。所以,我相信你得到了时间戳,在 javascript 中应该有特定的方法来比较时间戳,或者你必须使用数学方法计算时间差异,然后如果差异为 0,那么时间戳是相同的,否则会有一些差异

【讨论】:

  • 你能分享记录器的o/p吗?
  • 好的,所以我将单元格值存储在一个变量“CellValue”中,并在 TimeStamp 和 CellValue 上使用了 .toString() 并且不知何故这奏效了。我不明白为什么。
  • 这是因为两个值的类型不同,例如 false == 'false' 将导致 false,因为两者具有相同的值但数据类型不同。当您将每个值转换为字符串然后输入例如 'false' == 'false' 时,结果将是 true。
  • 是的,但在这种情况下,'==' 应该有效,对吧?
  • 是的,但我相信你得到了时间戳,并且在 javascript 中应该有特定的方法来比较时间戳,或者你必须使用数学方法计算时间差,然后如果差值为 0,那么时间戳相同,否则有一些差异
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 2022-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多