Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 谷歌应用程序脚本赢得';t验证我的IF语句_Database_Google Apps Script_Google Sheets - Fatal编程技术网

Database 谷歌应用程序脚本赢得';t验证我的IF语句

Database 谷歌应用程序脚本赢得';t验证我的IF语句,database,google-apps-script,google-sheets,Database,Google Apps Script,Google Sheets,我不能及时地弄明白这一点,也许会偷偷地希望有人告诉我我走错了方向,也许会建议一个更好的方法。我有一个脚本,它通过高亮显示一系列单元格并单击按钮来激活。首先要进行一些错误检查,以确保选择是正确的,然后这就是代码的实际细节。一切都很好,唯一一个我似乎无法解决的错误是if语句不会返回正数,因此它们只是被跳过,代码结束时没有执行任何实际操作。我在下面评论了每个变量的预期数据。请停下来 var source = SpreadsheetApp.getActiveSheet(); var sA1 = sour

我不能及时地弄明白这一点,也许会偷偷地希望有人告诉我我走错了方向,也许会建议一个更好的方法。我有一个脚本,它通过高亮显示一系列单元格并单击按钮来激活。首先要进行一些错误检查,以确保选择是正确的,然后这就是代码的实际细节。一切都很好,唯一一个我似乎无法解决的错误是if语句不会返回正数,因此它们只是被跳过,代码结束时没有执行任何实际操作。我在下面评论了每个变量的预期数据。请停下来

var source = SpreadsheetApp.getActiveSheet();
var sA1 = source.getActiveRange().getA1Notation();
var sdata = source.getRange(sA1).getValues();
var samtpaid = source.getRange(sA1).offset(0, 8, sdata.length, 1).getValues();
var sdate = source.getRange("J2").getValue();


var target = SpreadsheetApp.openById("...sheetid...").getSheetByName("...sheetname...");
目标电子表格包含sdata中的所有数据以及sdata中未包含的更多记录

  var trange = target.getDataRange();
  var tvalues = target.getDataRange().getValues();
  var trangesize = target.getDataRange().getLastRow();

    for (var i = 0; i < sdata.length; ++i) {
  var row = sdata[i];
  var row2 = samtpaid[i];
  var row3 = sdate;

    for (var j = 0; j < trangesize; ++j) {
  var trow = tvalues[j];

  if (row[0] == trow[0]){
第[6]行是电子邮件地址,trow[1]也是。。。代码从未对此if语句进行过测试,以查看它是否会通过,但这些值似乎完全匹配

  trange.offset(0, 17, 1, 1).setValues(row2[i]);
  trange.offset(0,18,1,1).setValue(row3);

    } //end inner if

    } //end outer if

    } //end inner for

  } //end outer For
只需要小小的更新。与其比较日期/时间,不如比较字符串

trange.offset(j,17,1,1).setValue(row2);
trange.offset(j,18,1,1).setValue(row3);
这里的小更新不需要第2行[i],只需要第2行就足够了。另外,使用j(而不是0)作为numRows偏移量意味着值被附加到正确的位置,而不仅仅是最上面的一行,并在每次代码循环时覆盖它自己


谢谢你的帮助

请尝试使用
行[6].toString()
来比较文本本身,以检查每个变量的字符串值。@BrianBennett非常感谢,这很有效。有没有解释为什么需要这样做?我正在将自动生成的时间戳单元格与另一张图纸上的时间戳单元格进行比较。。。似乎它应该以任何一种方式工作。
.getValues()
返回一个对象。在JavaScript中,对象相等是内存引用的,而不是值引用的。因此,字符串是相等的,但它们在内存中的位置不同,返回false。有一个很好的解释。我刚刚读了一篇,非常感谢你链接了那篇文章,值得一看:)有一篇好的
if (row[0].toString() == trow[0].toString()){
if (row[6] == trow[1]){
trange.offset(j,17,1,1).setValue(row2);
trange.offset(j,18,1,1).setValue(row3);