Google apps script 相同的值在if条件下不匹配

Google apps script 相同的值在if条件下不匹配,google-apps-script,google-sheets,google-sheets-macros,Google Apps Script,Google Sheets,Google Sheets Macros,这是我第一次尝试Google Sheets脚本 我试着比较两张表中第一列的每一行 如果表1中的任何值不在表2中,我会将其添加到表2的末尾 这是代码,比较值从不匹配,我尝试了==,==,带和不带toSting()。我从未得到标志found=1,sheet1 col1中的所有值都复制到sheet2 col1 var ui = SpreadsheetApp.getUi(); var ss = SpreadsheetApp.getActiveSpreadsheet(); function Prueba

这是我第一次尝试Google Sheets脚本

我试着比较两张表中第一列的每一行

如果表1中的任何值不在表2中,我会将其添加到表2的末尾

这是代码,比较值从不匹配,我尝试了==,==,带和不带toSting()。我从未得到标志
found=1
,sheet1 col1中的所有值都复制到sheet2 col1

var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActiveSpreadsheet();

function Prueba2() {
  var sheet = ss.getSheets()[0];
  var rangeData = sheet.getDataRange();
  sheet.getRange('A1').activate();

  var lastRow = rangeData.getLastRow();
  var searchRange = sheet.getRange(2,1, lastRow, 1);

  var sheet2 = ss.getSheets()[1];
  var rangeData2 = sheet2.getDataRange();
  var lastRow2 = rangeData2.getLastRow();
  var searchRange2 = sheet2.getRange(2,1, lastRow2, 1);

  var l1= searchRange.getLastRow();
  var l2= searchRange2.getLastRow();

  var rangeValues = searchRange.getValues();
  var rangeValues2 = searchRange2.getValues();

  var found=0;
  var arr = [];
  // Loop through array and if condition met
  for ( i = 0; i < lastRow - 1; i++){
    found=0;
    for ( j = 0 ; j < lastRow2 - 1; j++){
      var vi=rangeValues[i];
      var vj=rangeValues2[j];
      if(rangeValues[i].toString() === rangeValues2[j].toString()){
        found=1;     
        break; 
      }; 
    };
    if (found==0){
      Logger.log(rangeValues[i]);
      arr.push(rangeValues[i]); 
    };      
   };
  var toAddArray = [];
  for (k = 0; k < arr.length; ++k){
    toAddArray.push([arr[k]]);
  }

  sheet2.getRange(lastRow2+1, 1, arr.length, 1).setValues(toAddArray);
};
var ui=SpreadsheetApp.getUi();
var ss=SpreadsheetApp.getActiveSpreadsheet();
函数prueb2(){
var sheet=ss.getSheets()[0];
var rangeData=sheet.getDataRange();
sheet.getRange('A1').activate();
var lastRow=rangeData.getLastRow();
var searchRange=sheet.getRange(2,1,最后一行,1);
var sheet2=ss.getSheets()[1];
var rangeData2=sheet2.getDataRange();
var lastRow2=rangeData2.getLastRow();
var searchRange2=sheet2.getRange(2,1,lastRow2,1);
var l1=searchRange.getLastRow();
var l2=searchRange2.getLastRow();
var rangeValues=searchRange.getValues();
var rangeValues2=searchRange2.getValues();
var=0;
var-arr=[];
//循环遍历数组,如果满足条件
对于(i=0;i
编辑

这很有效,但我不知道为什么

for ( j = 0 ; j < lastRow2 - 1; j++){
  var vi=rangeValues[i].toString();
  var vj=rangeValues2[j].toString();
  //if(rangeValues[i] === rangeValues2[j]){
  if(vi===vj||vi==""){  
    found=1;     
    break; 
  }; 
};
(j=0;j
这个修改怎么样?
getValues()
检索到的值是二维数组。考虑到这一点,脚本就被修改了

模式1: 如果你的脚本被修改了,这次修改怎么样

发件人: 致: 注:
  • 添加脚本的原因如下所示。
    • 当运行
      rangeValues[i].toString()
      rangeValues2[j].toString()
      时,一维数组将转换为字符串,如
      [“sample”]
      “sample”
      。这样,
      vi==vj
      起作用
参考资料:

如果我误解了您的问题,并且这不是您想要的结果,我很抱歉。

由@Harold提供的解决方案可能会为您提供一种用索引替换一个循环的方法,感谢您的澄清。我将研究函数(e)看起来更优雅、更高效。这是100%java吗?@Horaciux谢谢你的回复。我很高兴你的问题得到了解决。这是Javascript。但是Google Apps脚本不同于最新的Javascript。你可以在上看到官方文档。
for ( i = 0; i < lastRow - 1; i++){
  found=0;
  for ( j = 0 ; j < lastRow2 - 1; j++){
    var vi=rangeValues[i];
    var vj=rangeValues2[j];
    if(rangeValues[i].toString() === rangeValues2[j].toString()){
      found=1;
      break; 
    }; 
  };
  if (found==0){
    Logger.log(rangeValues[i]);
    arr.push(rangeValues[i]);
  };      
 };
for ( i = 0; i < lastRow - 1; i++){
  found=0;
  for ( j = 0 ; j < lastRow2 - 1; j++){
      // var vi=rangeValues[i]; // This is not used in this script.
      // var vj=rangeValues2[j]; // This is not used in this script.
    if(rangeValues[i][0].toString() === rangeValues2[j][0].toString()){ // Modified
      found=1;
      break; 
    }; 
  };
  if (found==1){ // Modified
    Logger.log(rangeValues[i][0]); // Modified
    arr.push(rangeValues[i][0]); // Modified
  };
 };
var found=0;
var arr = [];
// Loop through array and if condition met
for ( i = 0; i < lastRow - 1; i++){
  found=0;
  for ( j = 0 ; j < lastRow2 - 1; j++){
    var vi=rangeValues[i];
    var vj=rangeValues2[j];
    if(rangeValues[i].toString() === rangeValues2[j].toString()){
      found=1;     
      break; 
    }; 
  };
  if (found==0){
    Logger.log(rangeValues[i]);
    arr.push(rangeValues[i]); 
  };      
 };
var toAddArray = [];
for (k = 0; k < arr.length; ++k){
  toAddArray.push([arr[k]]);
}

sheet2.getRange(lastRow2+1, 1, arr.length, 1).setValues(toAddArray);
var toAddArray = rangeValues.filter(function(e) {return rangeValues2.some(function(f) {return e[0] && f[0] && e[0] == f[0]})});
sheet2.getRange(lastRow2+1, 1, toAddArray.length, 1).setValues(toAddArray);