Javascript 如果一个选项卡上的列中的值与另一个选项卡上的列不匹配,Google Sheets将删除行

Javascript 如果一个选项卡上的列中的值与另一个选项卡上的列不匹配,Google Sheets将删除行,javascript,google-apps-script,Javascript,Google Apps Script,我试图在Google Sheets中创建一个脚本,将一个选项卡上的列中的值与另一个选项卡上的列中的值进行检查 比如,;我希望在一个选项卡(“用户”)中列出允许的电子邮件地址,然后在另一个选项卡(“表单1”)中输入地址 如果表单中的地址不在允许列表中,我希望它自动删除该行 我想这段代码的主要问题在这里 if( entryValues[i] === emailsAllowed[t] ) 即使数组中的值匹配,它也永远不会为真 function onOpen() { var sheet = S

我试图在Google Sheets中创建一个脚本,将一个选项卡上的列中的值与另一个选项卡上的列中的值进行检查

比如,;我希望在一个选项卡(“用户”)中列出允许的电子邮件地址,然后在另一个选项卡(“表单1”)中输入地址

如果表单中的地址不在允许列表中,我希望它自动删除该行

我想这段代码的主要问题在这里

if( entryValues[i] === emailsAllowed[t] )
即使数组中的值匹配,它也永远不会为真

function onOpen() 
{

  var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
  var s = sheet.getSheetByName('Form1'); //Get the sheet with the entered records in it.
  var s2 = sheet.getSheetByName('Users');//Get the sheet with the Allow list in it.

  var entryValues = s.getRange('C2:C9').getValues(); //(Get the list of e-mail addresses entered via the form (using their cell reference))
  var emailsAllowed = s2.getRange('A2:A6').getValues(); //(Get the list of allowed e-mail addresses (using their cell reference))
  var isAllowed = 0;

  for(var i = entryValues.length-1; i > 1 ; i--)  // work from the bottom up so when you delete a row it will not miss other rows or delete a row it should not.
  {
    var valueE = entryValues[i] // Test Variable to see what the value is (Can delete this line)
    for(var t = 0; t < emailsAllowed.length; t++) //Loop through all the records in the allow list
    {
      var valueA = emailsAllowed[t] // Test Variable to see what the value is (Can delete this line)
      if( entryValues[i] === emailsAllowed[t] ) // Check to see if there is a match between what was entered and what is in the allow list. //!!! For some reason this line is never true !!!//
      {  isAllowed = 1;} //if it is there set a variable isAllowed to 1 (to indicate that there is a match)
    }

    if( isAllowed === 1 ) 
    {isAllowed = 0; }// if there was a match set isAllowed back to 0, ready for the next run
    else
    {
      s.deleteRows(i) //if there was no match (and isAllowed is not set) delete the invalid row.
    }  
  }
}
函数onOpen() { var sheet=SpreadsheetApp.getActiveSpreadsheet(); var s=sheet.getSheetByName('Form1');//获取包含输入记录的工作表。 var s2=sheet.getSheetByName('Users');//获取包含允许列表的工作表。 var entryValues=s.getRange('C2:C9').getValues();/(获取通过表单输入的电子邮件地址列表(使用其单元格引用)) var emailsallow=s2.getRange('A2:A6').getValues();/(获取允许的电子邮件地址列表(使用其单元格引用)) 允许var=0; for(var i=entryValues.length-1;i>1;i--)//自下而上工作,这样当您删除一行时,它不会遗漏其他行,或者删除不应该遗漏的行。 { var valueE=entryValues[i]//测试变量以查看值是什么(可以删除此行) for(var t=0;t 谢谢

更新:这是工作代码:感谢(Sandy Good)

函数onOpen() { var sheet=SpreadsheetApp.getActiveSpreadsheet(); var s=sheet.getSheetByName('Form1');//获取包含输入记录的工作表。 var s2=sheet.getSheetByName('Users');//获取包含允许列表的工作表。 var entryValues=s.getRange('C2:C9').getValues().join().split(“,”);/(获取通过表单输入的电子邮件地址列表(使用其单元格引用)) var emailsallow=s2.getRange('A2:A6').getValues().join().split(“,”;/(获取允许的电子邮件地址列表(使用其单元格引用)) var isAllowed=0;//创建isAllowed变量并将其设置为0(如果该行匹配,将使用该变量离开该行) for(var i=entryValues.length-1;i>1;i--)//自下而上工作,这样当您删除一行时,它不会遗漏其他行,或者删除不应该遗漏的行。 { var valueE=entryValues[i]//测试变量以查看值是什么(可以删除此行) for(var t=0;t方法返回一个二维数组。您没有获得内部数组值。代码不是比较值与值,而是比较数组与数组。内部数组中只有一个值,但它仍然是一个数组

您需要从二维数组中获取值。当前代码如下所示:

var entryValues = s.getRange('C2:C9').getValues();
var emailsAllowed = s2.getRange('A2:A6').getValues();
要将二维阵列转换为常规阵列,请执行以下操作:

var entryValues = s.getRange('C2:C9').getValues().join().split(",");
var emailsAllowed = s2.getRange('A2:A6').getValues().join().split(",");
可以使用此方法,因为每个内部数组中只有一个值,这是因为您只得到一列。如果您得到的是多个列,那么这种技术将不起作用

twoDArray = [ [innerValue], [innerValueTwo], [inner3] ]
getValues()
方法返回一个二维数组。您没有获得内部数组值。代码不是比较值与值,而是比较数组与数组。内部数组中只有一个值,但它仍然是一个数组

您需要从二维数组中获取值。当前代码如下所示:

var entryValues = s.getRange('C2:C9').getValues();
var emailsAllowed = s2.getRange('A2:A6').getValues();
要将二维阵列转换为常规阵列,请执行以下操作:

var entryValues = s.getRange('C2:C9').getValues().join().split(",");
var emailsAllowed = s2.getRange('A2:A6').getValues().join().split(",");
可以使用此方法,因为每个内部数组中只有一个值,这是因为您只得到一列。如果您得到的是多个列,那么这种技术将不起作用

twoDArray = [ [innerValue], [innerValueTwo], [inner3] ]