1

我正在尝试将我的脚本部署为我在电子表格中创建的 Web 应用程序。我已按照 google 的说明处理了版本管理问题,但是当我尝试部署应用程序时,当我尝试为我的最新代码测试网络应用程序时收到以下消息:“缺少未定义的文档(也许它已被删除?)

我知道电子表格存在。我正在部署应用程序,因为我需要应用程序 URL 作为我的代码的一部分。我正在尝试通过电子邮件自动化审批流程。部署应用程序时,我选择了最新版本,选择以“用户访问网络应用程序”的身份执行应用程序,因为我想共享此应用程序,并将谁可以访问该应用程序设置为“只有我自己”。当我单击发送到我的电子邮件的应用程序 URL 时,我还被告知“您请求的页面(或文档)不存在”。

我对此很陌生。我按照本教程获得了我所拥有的:http: //youtu.be/K2uLzJdEVCA

然而,在视频中,它不称为部署 Web 应用程序,而是称为发布脚本。我想这是新的东西。无论如何,我需要应用程序 URL。

这是我的代码,以防其中有缺陷。

function approve() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('Editors');
  var data = sheet.getDataRange().getValues();
  for (var i = 0; i < data.length; i++) {
    var row = data[i];
    var fName = row[1];
    var lName = row[2];
    var email = row[3];
    var approved = row[4];
    var notified = row[5];

    if(approved.toLowerCase() == 'yes' && notified.toLowerCase() != 'yes'){
      GmailApp.sendEmail(email, "Request Approved: CI&W Community Edit Permission", "You may now make edits to the site!") ;
      data[i][5]= 'yes';
     }
  }
  sheet.getDataRange().setValues(data);

}

function onOpen() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  spreadsheet.addMenu('Functions', [
    { name: 'Approve', functionName: 'approve' }
                     ]);

}

function onFormSub(event) {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName('Editors');
  var fName = event.namedValues["First Name"];
  var lName = event.namedValues["Last Name"];
  var email = event.namedValues["Email"];
  var url = 'I paste in the app URL i am given here';
  url += '&spreadsheetId=' + spreadsheet.getId();
  url += '&row=' + sheet.getLastRow();
  Browser.msgBox(spreadsheet.getId())
  var message = 'Name: ' + fName + ' ' + lName + '\nEmail: ' + email + '\nApprove: ' + url;
  MailApp.sendEmail('fakeemail@gmail.com', 'New Edit Request: CI&W', message);


}

function doGet(event) {
  var spreadsheetId = event.parameter['spreadsheetId'];
  var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  var sheet = spreadsheet.getSheetByName('Editors');
  var row = event.parameter['row'];

  sheet.getRange(row,5).setValue('yes');
  var app = UiApp.createApplication();
  var label = app.createLabel();
  label.setText('The request was approved');
  app.add(label);
  return app;
}
4

1 回答 1

0

Webapp url 需要有 2 个参数:电子表格 ID 和行号。您是否使用正确添加的参数对其进行了测试?这也可以在视频中看到(但由于暴力视频压缩而难以阅读) 在此处输入图像描述

关于发布/部署为 webapp,您是对的:进程的名称已更改,但大致相同......不用担心。


编辑:经过进一步检查,有一个“?” 在网址末尾和参数之前缺少!(这种变化来自 webapp url 的新构造方式)

代码应该是这样的:

    function onFormSub(event) {
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = spreadsheet.getSheetByName('Editors');
      var fName = event.namedValues["First Name"];
      var lName = event.namedValues["Last Name"];
      var email = event.namedValues["Email"];
      var url = 'https://script.google.com/macros/s/AKfycbyIfU-Qxp7urPdsD1iuYY2arBIeHya2Z7UPgdvMib67kFHNUWbQ/exec?';
      url += '&spreadsheetId='+spreadsheet.getId()
      url += '&row=' + sheet.getLastRow();
      Browser.msgBox(spreadsheet.getId())
      var message = 'Name: ' + fName + ' ' + lName + '\nEmail: ' + email + '\nApprove: ' + url;
      MailApp.sendEmail('xxxx@gmail.com', 'New Edit Request: CI&W', message);
}
于 2012-12-09T13:10:20.643 回答