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