【问题标题】:Google Apps Script Popup Dialog, library issuesGoogle Apps 脚本弹出对话框,库问题
【发布时间】:2021-04-13 17:46:41
【问题描述】:

所以我有一个由几十张工作表使用的库,它像这样调用各个函数:

(来自菜单)

.addItem('What are the variables for this sheet', 'LibraryName.logMyVariables')

这一切都很好,但现在我遇到了一个问题,我似乎无法操作模态对话框。

这两部分工作正常:

.addItem('Show dialog (BETA)', 'LibraryName.showDialog')

(在库端,后端 gs)

function showDialog() {
  var html = HtmlService.createHtmlOutputFromFile('projectDialog')
      .setWidth(900)
      .setHeight(900);
  SpreadsheetApp.getUi()
      .showModalDialog(html, 'Project Update Thingy');
}

到目前为止一切顺利。我遇到问题的地方是库脚本的前端对话框尝试运行其填充数字功能。虽然从拥有该库的电子表格运行时它工作得很好,但运行该库的其他电子表格却出现错误。

这是在对话框 html 中。

google.script.run.withSuccessHandler(addOptions).withFailureHandler(errorOutput).getExistingProjectNumbers();

我收到此错误:

google.script.run.withSuccessHandler(...).withFailureHandler(...).getExistingProjectNumbers 不是函数 在 userCodeAppPanel:2

我的直觉是,这意味着对话框在本地运行,所以我需要像调用其他库函数一样调用它(这会破坏它在实际库上的工作,但我不在乎)所以我尝试了:

google.script.run.withSuccessHandler(addOptions).withFailureHandler(errorOutput).LibraryName.getExistingProjectNumbers();

但这变成了这个错误

VM34:2 未捕获的类型错误:无法读取属性 'getExistingProjectNumbers' of undefined

我觉得我已经很接近了,我只需要更多的见解来解决这个问题。让我重申一下,这个函数在库脚本电子表格本身中运行得很好,只有当你通过库访问对话框时我才会遇到这个问题。

【问题讨论】:

  • 它不会让我回答我自己的问题,但我发现了答案,我需要调用 g.s.run 库函数的本地包装器。因为只有 4 个是可行的。
  • 虽然我不确定我是否能正确理解你的情况,例如,这个线程对你的情况有用吗? stackoverflow.com/q/66711782

标签: google-apps-script modal-dialog


【解决方案1】:

原来运行库的页面只需要包装函数。

我只需要添加到本地页面的四个函数就是这样

function getExistingProjectNumbers(){Library.getExistingProjectNumbers()}

我在一个随机博客中找到了这个解决方案。如果您有四个以上的函数,您可以通过将函数作为参数传递给一个通用包装函数来使其复杂化,但这对我来说更整洁且合理,因为 ui 仅使用 4 个后端函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多