错误:请求不可用 - Google Sheet Mail Merge

时间:2017-08-07 11:22:22

标签: google-apps-script

以下是我的示例脚本,我面临两个问题

我正在建立一个工作流程 - 用户使用网络应用程序提交数据,存储在工作表中的数据以及转发电子邮件以供批准和批准输入可以在工作表中更新

  1. 获取"错误:请求不可用",当我点击批准按钮时
  2. 无法在表单提交时触发电子邮件
  3. Sample Sheet deatiled脚本在上面的表格中更新

    
    
    var REQUESTS_STATE_COLUMN = 32;
    var STATE_APPROVERS_EMAILED = "EMAILED_Response Pending";
    var STATE_APPROVED = "Approved";
    var STATE_DENIED = "Rejected";
    
    
    function sendEmail() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = SpreadsheetApp.getActiveSheet();
      var dataRange = sheet.getRange("A2:AH2");
      var data = dataRange.getValues();
      for (i in data) {
        var rowData = data[i];
        var email = rowData[2];
        var emailAddress = rowData[2];
        var submiterEmail = rowData[2];
        var ProjectName = rowData[3];
        var SrDesign = "Sr. Design Architect Services";
        var PerHourRate = rowData[6];    
        var NumberOfHours = rowData[7];
        var TotalRate = rowData[8];
        var Contact  = "Contact Centre Expert";
        var PerHourRate2 = rowData[10];
        var NumberOfHours2 = rowData[11];
        var NTotalRate2 = rowData[12];
        var NJrDesign = "Jr. Design Architect";
        var PerHourRate3 = rowData[14];
        var NumberOfHours3 = rowData[15];
        var TotalRate3 = rowData[16];
        var Outsourced = "Outsourced Technical Support Resource";
        var PerHourRate4 = rowData[18];
        var NumberOfHours4 = rowData[19];
        var TotalRate4 = rowData[20];
        var Supplier = "Supplier Management";
        var PerHourRate5 = rowData[22];
        var NumberOfHours5 = rowData[23];
        var TotalRate5 = rowData[24];
        var Project = "Project Management & Execution";
        var PerHourRate6 = rowData[26];
        var NumberOfHours6 = rowData[27];
        var TotalRate6 = rowData[28];
        var UserAccount = rowData[28];
        var GrandTotalRate = rowData[29];
        var row = e.range.getRow();
        var seq = rowData[1];
        var url = ScriptApp.getService().getUrl();
        var sheet = SpreadsheetApp.openById('1sS8_GQ3EMcsXCtj_j8LKg4jywKMu_8symTAFbIkGyh4').getSheetByName("Sheet1");
        var cellval = dataRange.getCell(i+1, 1).getValue();
    
    
      var options = '?approval=%APPROVE%&reply=%EMAIL%'
               .replace("%EMAIL%",rowData[2])         
     var approve = url+options.replace("%APPROVE%","Approved")+'&row='+row+'&cellval='+cellval; 
      var reject = url+options.replace("%APPROVE%","Rejected")+'&row='+row+'&cellval='+cellval;
    
     var subject = 'Technology Charges for '+ProjectName+''; 
    var html = '<p style="font-family:Verdana; fontsize=9px">Hello Recipient,<br/><br/><br/><br/>Referance No: '+cellval+'<br/><a href='+ approve +'> <b>approve </b></a><a href='+ reject +'> <b>Reject</b></a><br/>'
    MailApp.sendEmail({
        to: emailAddress,
        subject: subject,
        htmlBody: html,
      });
    
       //Add a state in the form spreadsheet with APPROVERS_EMAILED state  
      var sheet = SpreadsheetApp.getActiveSheet();
      var lastRow = sheet.getLastRow();
      sheet.getRange(lastRow, REQUESTS_STATE_COLUMN+1).setValue(STATE_APPROVERS_EMAILED);
    
    }
    }
    
    function doGet(e){
      var answer = (e.parameter.approval === 'Approved') ? 'Yes -Approved!' : 'No-Rejected '; 
      var cellval = e.parameter.cellval;
      var email = e.parameter.reply;
    
      var sheet = SpreadsheetApp.openById("1sS8_GQ3EMcsXCtj_j8LKg4jywKMu_8symTAFbIkGyh4").getSheetByName("Sheet1");
      var data = sheet.getDataRange().getValues();
      var headers = data[0];
      var approvalCol = headers.indexOf("Approval") + 1;
      if (0 === approvalCol) throw new Error ("Must add Approval column.");
    
      // Record approval or rejection in spreadsheet
      var row = ArrayLib.indexOf(data, 0, cellval);
      if (row < 0) throw new Error ("Request not available.");  // Throw error if request was not found
      sheet.getRange(row+1, approvalCol).setValue(e.parameter.approval);
    
      // Display response to approver
      var app = UiApp.createApplication();
      app.add(app.createHTML('<h2>Thank you..! Your response has been recorded'+' saying: '+ answer + '</h2>'))
      return app
    }
    &#13;
    &#13;
    &#13;

1 个答案:

答案 0 :(得分:0)

将doGet方法替换为以下方法。它应该可以解决您的第一个错误。

function doGet(e) {
    var answer = (e.parameter.approval === 'Approved') ? 'Yes -Approved!' : 'No-Rejected ';
    var cellval = e.parameter.cellval;
    var email = e.parameter.reply;

    var sheet = SpreadsheetApp.openById("1sS8_GQ3EMcsXCtj_j8LKg4jywKMu_8symTAFbIkGyh4").getSheetByName("Sheet1");
    var data = sheet.getRange(2, 1, sheet.getLastRow() - 1).getValues();
    data = data.concat.apply([], data);
    var rowIndex = data.indexOf(cellval);

      if (rowIndex == -1) {
          throw new Error("Request not available.");
      } else {
          sheet.getRange(rowIndex + 2, 32).setValue(e.parameter.approval); //Assuming column 32 is approval column
      }
    var app = UiApp.createApplication();
    app.add(app.createHTML('<h2>Thank you..! Your response has been recorded' + ' saying: ' + answer + '</h2>'))
    return app
}