我想创建一个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);
}
答案 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并让其通过服务帐户运行。