在用户对话框中给出回答是/否之前,Google应用脚本返回undefined

时间:2015-04-26 19:01:45

标签: google-apps-script google-sheets

在用户单击是/否之前,方法返回未定义。根据Google应用程序脚本,当对话框显示时,应冻结服务器进程。但在我的测试中,在用户单击是/否之前返回该值。

function getValues() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var okToInsert = true;
  if (sheet.getName() !== "xxx") {
    var ui = SpreadsheetApp.getUi();
    var alert = ui.alert('Confirm',
        'Your active sheet is not "xxx". Continue to insert?',
        ui.ButtonSet.YES_NO);
    if(alert == ui.Button.NO){
      okToInsert = false;
    }
  }

  return {
     "okToInsert": okToInsert
  };
}

这是我的前端js:

  google.script.run
    .withSuccessHandler(
      function(selectedRange, scope) {
        console.log(">>> selectedRange: " + selectedRange);
      })
    .withFailureHandler(
      function(msg, scope) {
      })
    .withUserObject($scope)
    .getValues();

这是我启用侧边栏的方式:

  var ui = HtmlService.createTemplateFromFile('sidebar').evaluate()
      .setSandboxMode(HtmlService.SandboxMode.IFRAME)
      .setTitle('this is title');
  SpreadsheetApp.getUi().showSidebar(ui);

我在这里创建了一个名为“Dialog return test”的示例侧边栏加载项。 https://docs.google.com/spreadsheets/d/1eHwjHKuBIDw2WOTRU5CZAu9m9V-9mXimFyMlGXbPl-U/edit?usp=sharing

1 个答案:

答案 0 :(得分:1)

您的代码非常适合我:

enter image description here

我得到了对话提示,并且定义了返回没有错误。问题可能出在您的代码的另一部分,或者可能是脚本文件本身。我建议在新的工作表文件中尝试新脚本,并尝试从那里缩小问题范围。