繁体   English   中英

Google Sheet Script - 根据包含电子邮件的一系列单元格隐藏选项卡

[英]Google Sheet Script - Hiding tabs based on a range of cells containing emails

所以,我想做的是出于隐私原因为某些用户隐藏某些选项卡。

我有一个包含 8 列和 51 行的选项卡。 (每组用户一列,标题一行,每组50个slot)

我想做的是拿这张表,把每个组分开,然后根据当前(活动)用户所在的组,隐藏某些表并显示其他表。

我有 2 个函数,一个 function 用于更新组 (validUsers),第二个用于更新隐藏的选项卡 (updateHiddenSheets)。

validUsers() 当前有 1/1 成功触发。 (onEdit) updateHiddenSheets() 当前有 0/2 个成功的触发器。 (打开时)

有一个更好的方法吗?

编辑:我一直在尝试一些不同的事情,现在我遇到了 validUsers() 的错误。

TypeError: Cannot read property '0' of undefined
Line 18

(这是第一个 for 循环中的一行)

代码:

  var numEmails = 50;//This is the number of emails in a given column 


  var emailsList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').getRange(2,1,numEmails,8);
  var stakePeople = [numEmails];
  var crystalHeights1 = [numEmails];
  var crystalHeights2 = [numEmails];
  var stratfordEast = [numEmails];
  var stratford = [numEmails];
  var highlandPark = [numEmails];
  var imperial1 = [numEmails];
  var imperial2 = [numEmails];

  for(i=1; i<=numEmails;i++) {
    crystalHeights1 [i] = emailsList[i][0];
  }
  for(i=1; i<=numEmails;i++) {
    crystalHeights2 [i] = emailsList[i][1];
  }
  for(i=1; i<=numEmails;i++) {
    stratfordEast [i] = emailsList[i][2];
  }
  for(i=1; i<=numEmails;i++) {
    stratford [i] = emailsList[i][3];
  }
  for(i=1; i<=numEmails;i++) {
    highlandPark[i] = emailsList[i][4];
  }
  for(i=1; i<=numEmails;i++) {
    imperial1 [i] = emailsList[i][5];
  }
  for(i=1; i<=numEmails;i++) {
    imperial2 [i] = emailsList[i][6];
  }
  for(i=1; i<=numEmails;i++) {
    stakePeople [i] = emailsList[i][7];
  }

}
  var currentUserEmail = Session.getActiveUser().getEmail()
  if (crystalHeights1.includes(currentUserEmail)) { 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').showSheet(); 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').hideSheet();
  } 
  else if (crystalHeights2.includes(currentUserEmail)) { 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').hideSheet(); 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').showSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').hideSheet();
  } 
  else if (stratfordEast.includes(currentUserEmail)) { 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').hideSheet(); 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').showSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').hideSheet();
  } 
  else if (stratford.includes(currentUserEmail)) { 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').hideSheet(); 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').showSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').hideSheet();
  } 
  else if (highlandPark.includes(currentUserEmail)) { 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').hideSheet(); 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').showSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').hideSheet();
  } 
  else if (imperial1.includes(currentUserEmail)) { 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').hideSheet(); 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').showSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').hideSheet();
  } 
  else if (imperial2.includes(currentUserEmail)) { 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').hideSheet(); 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').showSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').hideSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').hideSheet();
  } 
  else if (stakePeople.includes(currentUserEmail)) { 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 1st Ward').showSheet(); 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Crystal Heights 2nd Ward').showSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford East Ward').showSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Stratford Ward').showSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Highland Park Ward').showSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 1st Ward').showSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Imperial 2nd Ward').showSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Troubleshooting').showSheet();
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').showSheet();
  } 
}

您收到此错误的原因是因为您试图访问emailList数组中未定义数据的0属性。

此外,如果您仔细查看您的emailList数组,它是一个范围数组。 为了从这些范围中获取实际值,您必须添加getValues()

var emailsList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Emails').getRange(2,1,numEmails,8).getValues();

参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM