Если лист должен быть прочитан, а не отредактирован пользователями, вы можете связать скрипт с пустой Таблицей вместо Таблицы, содержащей все пользовательские данные, и изменить скрипт так, чтобы он копировализ таблицы, содержащей все данные, только пользовательские данные в таблицу пользователя.Это будет выглядеть так:
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 и запустить его от учетной записи службы.