尝试为我的UI部署Web应用程序失败:“文档未定义丢失(可能已删除?)”

时间:2012-12-09 12:14:14

标签: google-apps-script

我正在尝试将我的脚本部署为我在电子表格中创建的Web应用程序。我已经按照谷歌的指示处理了版本,但是当我尝试部署应用程序时,当我尝试测试Web应用程序以获取最新代码时,我收到以下消息: “缺少文档undefined(可能已被删除?)

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

我对此很新。我按照本教程获取了我的内容:http://youtu.be/K2uLzJdEVCA

然而,在视频中,它不被称为部署Web应用程序,而是称为发布脚本。我想这是新的东西。无论如何,我需要App 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;
}

1 个答案:

答案 0 :(得分:0)

Webapp网址需要有2个参数:电子表格ID和行号。你是否正确添加了参数进行测试? 这也可以在视频中看到(但由于剧烈的视频压缩而难以阅读) enter image description here

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


编辑:经过进一步检查,有一个'?'在url的末尾和参数之前丢失了! (这种变化来自于构建webapp网址的新方式)

代码应该是这样的:

    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);
}