我想创建Google脚本以仅显示电子表格中的活动用户数据

时间:2019-07-07 21:18:15

标签: google-apps-script

我想创建一个Google脚本来显示电子表格中活动用户登录的数据,仅是因为工作表包含很多用户并且它是机密数据,所以我该怎么做?

function getActiveUser() { 
  var sheet = SpreadsheetApp.getActiveSheet(); 
  var startRow = 2; // First row of data to process 
  var numRows = 31; // Number of rows to process 
  // Fetch the range of cells A2:B8 
  var dataRange = sheet.getRange(startRow, 1, numRows, 7); // Fetch values for each row in the Range. 
  var data = dataRange.getValues(); 
  var email = Session.getActiveUser().getEmail(); 
  Logger.log(email); 
}

1 个答案:

答案 0 :(得分:1)

如果仅应由用户读取而不是由用户编辑工作表,则可以将脚本链接到一个空的电子表格,而不是链接包含所有用户数据的电子表格,并修改脚本,使其复制从包含所有数据的电子表格(仅用户数据)到用户电子表格。看起来像这样:

function getActiveUser() { 
  var sheet = SpreadsheetApp.openById('your_Spreadsheet_ID').getActiveSheet(); 
  var startRow = 2; // First row of data to process 
  var numRows = 31; // Number of rows to process 
  // Fetch the range of cells A2:B8 
  var dataRange = sheet.getRange(startRow, 1, numRows, 7); // Fetch values for each row in the Range. 
  var data = dataRange.getValues(); 
  var email = Session.getActiveUser().getEmail(); 
  //define a sheet where to copy only the user data
  var userSheet=SpreadsheetApp.getActiveSheet(); 
  var userRange = userSheet.getRange(startRow, 1, numRows, 7);
  // define the column in the sheet where the emails of the users is stored
  var userColumn=1;
  var k=1;
  //Copy all the rows that contain data of the user
  for(var i=0; i<data.length;i++){
    if(data[i][userColumn-1]==email){
      for(var j=0;j<6;j++){
       userRange.getCell(k,j+1).setValue(data[i][userColumn-1+j])
      }
    k++;  
    }
  }  
}

但是,请记住,仅当您将电子表格存储在共享驱动器上时,此方法才有效。因此,即使用户在运行脚本时看不到电子表格,他仍然可以从共享驱动器手动访问它。 要解决此问题,您需要编写一个API并让其通过服务帐户运行。