首页 > 解决方案 > 异常:参数不能为空:提示 google Scripts 中的错误

问题描述

我创建了一个带有确认弹出窗口的邮件合并,以确认脚本最近没有运行,并仔细检查用户打算发送电子邮件。该脚本运行良好,但令人讨厌的是我在运行时收到以下错误: 在此处输入图像描述

陈述;例外:参数不能为空:提示

如果可能的话,我想摆脱这个。我附上我的代码。

//Creates a functional log of how many emails are sent and to how many branches

function confirmationWindow(){
  var numberSent = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Validations').getRange('D3').getValue();
  var numberOfVios = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Validations').getRange('D2').getValue();
  var ui = SpreadsheetApp.getUi();
  var ui = SpreadsheetApp.getUi();
      ui.alert(
        'You have succesfully sent ' + numberOfVios + ' violations, to ' + numberSent + ' branches.',)

}

function saveData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Log');
  var date = new Date()
  var user = Session.getActiveUser().getEmail();
  var range = ss.getRange("A:B")
  var numberSent = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Validations').getRange('D2').getValue();
  var branchNumber = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Validations').getRange('D3').getValue();
  ss.appendRow([date,user,numberSent,branchNumber]);
}

var EMAIL_SENT = 'True';

function sendEmails() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Output');
  var sheetI= SpreadsheetApp.getActive().getSheetByName('Input');
  var sheetC = SpreadsheetApp.getActive().getSheetByName('Control');
  var emailNum = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Validations').getRange('D3').getValue();
  var startRow = 2; 
  var numRows = emailNum; 
  var dataRange = sheet.getRange(startRow, 1, numRows, 6);
  sheetI.setTabColor("ff0000");
  saveData()
  
  var data = dataRange.getValues();
  for (var i in data) {
    var row = data[i];
    var emailAddress = row[3]; 
    var message = row[5] + "\n\nT\n\nT\n\nT"; 
    var message = message.replace(/\n/g, '<br>');
    var subject = row[4];
    MailApp.sendEmail(emailAddress, subject, message,{htmlBody:message});
    sheet.getRange(startRow + i - 18, 8).setValue(EMAIL_SENT);
    sheetC.getRange(startRow + i - 18, 3).setValue(EMAIL_SENT);
    SpreadsheetApp.flush();
  }
  confirmationWindow()
}


function recentSend() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Log');
  var lastR = sheet.getLastRow();
  var recentRun = sheet.getRange('A' + lastR).getValue();
  if(lastR=1){var recentlySent = 'False'}
  var today = new Date().valueOf()
  var recentDate =  recentRun
  var sec = 1000;
  var min = 60 * sec;
  var hour = 60 * min;
  var day = 24 * hour;
  var difference = today - recentDate
  var hourDifference =Math.floor(difference%day/hour);
  if (hourDifference > '12'){var recentlySent = 'False'}
  else {var recentlySent = 'True'}
  return(recentlySent)
}
function recentlySentTrue(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Log');
  var lastR = sheet.getLastRow();
  var recentUser = sheet.getRange('B' + lastR).getValue();
  var recentQuant = sheet.getRange('C' + lastR).getValue();
  var recentT = sheet.getRange('A' + lastR).getValue();
  var recentSendLog = recentT.toString();
  var recentTime = recentSendLog.slice(16,21) 
  var recentDate = recentSendLog.slice(0,11)
  var ui = SpreadsheetApp.getUi();
      var result = ui.alert(
        'Are you sure you wish to send?',
        'The user, ' + recentUser + ' ,recently sent ' + recentQuant + ' emails, at ' + recentTime + ' on ' + recentDate,
          ui.ButtonSet.YES_NO);
      if (result == ui.Button.YES) {

        ui.alert(recentlySentFalse());
    }   
    else {
    }
    }

function recentlySentFalse(){
  var ui = SpreadsheetApp.getUi();
  var ui = SpreadsheetApp.getUi();
      var result = ui.alert(
        'Are you Sure you wish to send?',
        'Are you sure you want to send these violations?',
          ui.ButtonSet.YES_NO);
      if (result == ui.Button.YES) {
        ui.alert(sendEmails());
    }   else {
    }
}



function confirm(){
  var recentlySent = recentSend();
  if (recentlySent == 'True'){
    recentlySentTrue()
  } 
  else{recentlySentFalse()
  }
}
    
  



 

任何帮助都会很棒。

标签: javascriptgoogle-sheets

解决方案


说明

ui.alert()具有函数参数的调用无效recentlySentFalse(),因为函数没有 return 语句,因此它们返回null. ui.alert()通话至少需要一条提示信息。

解决方案1:

将函数调用放在 UI 警报消息之后:

      if (result == ui.Button.YES) {

        ui.alert('Sending message...');
        recentlySentFalse();
    }   

解决方案2:

如果您不想要过多的警报,只需删除 ui.alert 并立即调用该函数。

      if (result == ui.Button.YES) {

        recentlySentFalse();
    }   

参考:

类用户界面 | 应用脚本


推荐阅读