微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Google Apps 脚本错误:“您无权访问所请求的文档”

如何解决Google Apps 脚本错误:“您无权访问所请求的文档”

我正在尝试创建一个脚本,其中在提交另一个电子表格时会更新日期和其他信息,并且该表格的 pdf 版本会发送给另一名工作人员,然后他们可以批准相同的内容。虽然代码为我运行,但其他工作人员无法使用该脚本,因为尽管他们拥有对所有文档的编辑访问权限,但他们不断收到“您无权访问所请求文档的权限”。

关于为什么会发生这种情况的任何想法。我希望员工能够运行的代码是:

function sendToResponse() {
  
  var subject = sheet.getRange(3,2).getValue();
  var rowOfTargetSubjectInMasterSheet = rowOfTarget(subject);
  var myLastYearGroupCell = countCellForTargetSheet(sheet,12,3);
  var myLastPeriodLengthCell = countCellForTargetSheet(sheet,12 + myLastYearGroupCell + 5,3);

  Logger.log(myLastYearGroupCell);
  Logger.log(myLastPeriodLengthCell);
    
  var stuGroup = sheet.getRange(12,3,myLastYearGroupCell).getValues();
  targetSheet.getRange(rowOfTargetSubjectInMasterSheet + myLastYearGroupCell + 2,5,myLastYearGroupCell).setValues(stuGroup);
     
  var lengthTeaching = sheet.getRange(17 + myLastYearGroupCell,myLastPeriodLengthCell).getValues();
  targetSheet.getRange(rowOfTargetSubjectInMasterSheet + myLastPeriodLengthCell + 2,7,myLastPeriodLengthCell).setValues(lengthTeaching);
  
  var lengthStaffing = countCellFor(teacherRow);
    
  var staffing = sheet.getRange(teacherRow + 1,1,lengthStaffing,3).getValues();
  targetSheet.getRange(rowOfTargetSubjectInMasterSheet,8,3).setValues(staffing);
  
  var ptDays = sheet.getRange(teacherRow + 1,1).getValues();
  targetSheet.getRange(rowOfTargetSubjectInMasterSheet,1).setValues(ptDays);
  
  var lengthClass = countCellFor(classSheetRow);
  
  var classes = sheet.getRange(classSheetRow + 1,lengthClass,13,3).setValues(classes);
  
  var ctlName = sheet.getRange(4,2).getValue();
  var ctlEmail = sheet.getRange(5,2).getValue();
  var sltName = sheet.getRange(6,2).getValue();
  var sltEmail = sheet.getRange(7,2).getValue();
  var emailDate = targetSheet.getRange(rowOfTargetSubjectInMasterSheet,16);
  var sltResponse = targetSheet.getRange(rowOfTargetSubjectInMasterSheet,17).getValue();
  var cell = targetSheet.getRange(rowOfTargetSubjectInMasterSheet,1);
  var workingRow = cell.getRow();
  
  if (sltResponse == '') {
    
    var approve = url + "?approval=Approved" + "&reply=" + ctlEmail + "&r=" + workingRow + "&sltName=" + sltName;
        
    var email = HtmlService.createTemplateFromFile('CTLRequestResponseSLTEmail');
    email.sltName = sltName;
    email.subject = subject;
    email.CTL = ctlName;
    email.approve = approve;
        
    var response = email.evaluate().getContent();
        
    MailApp.sendEmail({
         to: sltEmail,subject: 'TiMetable 2020-2021: CTL Request for ' + subject,htmlBody: response,attachments: [SpreadsheetApp.getActiveSpreadsheet()]
       });
  
    var d = new Date();
    emailDate.setValue(d);
  };
}

function doGet(e) {
  
  // Update Spreadsheet
  var answer = e.parameter.approval;
  var workingRow = e.parameter.r;
  var d = new Date()
   
  targetSheet.getRange(workingRow,17).setValue(answer);
  targetSheet.getRange(workingRow,16).setValue(d);
  
  //Email
  
  var ctlEmail = e.parameter.reply;
  var sltName = e.parameter.sltName;
  
  GmailApp.sendEmail(ctlEmail,"CTL Request 2020-2021","Thank you for submitting your CTL Request for 2020-2021.  The form has been sent to your SLT Line Manager for approval.");
  
  var app = HtmlService.createHtmlOutput(sltName + " thank you for your response.");
  
  return app
  
}

我已部署为 Web 应用程序,并尝试以我自己和访问 Web 应用程序的用户身份执行应用程序,但均无效。

谢谢

法兹拉

解决方法

如果您自己部署 WebApp:

  • 确保将 Who has access to the app: 设置为 AnyoneAnyone,even anonymous 以确保任何用户都可以访问 WebApp
  • 请注意,所有请求(例如 GmailApp.sendEmail())都将以您的名义执行 - 即以您的名义

如果您将 WebApp 部署为 User accessing the web app

  • 确保为代码运行的电子表格设置共享权限,以便所有用户/要运行 WebApp 的用户都具有编辑权限

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。