Google表格&从Chrome商店安装加载项时,文档脚本无法创建加载项菜单

时间:2014-12-01 19:38:48

标签: google-apps-script google-sheets google-docs-api google-drive-api

可能的原因如下:

通常这是由授权生命周期的问题引起的,特别是在开放阶段。

最常见的罪魁祸首是代码中的一个全局变量,它试图在未经授权的情况下访问Google服务,例如:

var doc = DocumentApp.getActiveDocument();

参见文档:

警告:当您的onOpen(e)函数运行时,将加载整个脚本并执行任何全局语句。这些语句在与onOpen(e)相同的授权模式下执行,如果模式禁止它们将失败。这可以防止打开(e)。如果您发布的加载项无法添加其菜单项,请查看浏览器的JavaScript控制台以查看是否抛出了错误,然后检查您的脚本以查看onOpen(e)函数或全局变量是否调用了在AuthMode.NONE中不允许。

这是我的剧本:

    function onOpen(e) {
    SpreadsheetApp.getUi().createAddonMenu()
      .addItem('Browse Templates', 'browseTemplates')
      .addToUi();
}

function onInstall(e) {
  onOpen(e);
}

function browseTemplates(){
    collectBasicData();
   // Display a modal dialog box with custom HtmlService content.
   var htmlOutput = HtmlService
   .createTemplateFromFile("Gallery").evaluate()
   .setWidth(700)
   .setHeight(510);
   SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Spreadsheet123 - Template Vault');
}

function collectAllData(){
  var sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName(DATA_SHEET);
  DATA = sheet.getDataRange().getValues();
  return DATA;
}

function collectBasicData(){
  var sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName(PIVOT_SHEET);
  var tabSheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName(TAB_SHEET);
  BASIC_DATA = {
    "tab_about" : getValue(tabSheet,"B1"),
    "tab_help": getValue(tabSheet,"B2"),
    "pivot":sheet.getDataRange().getValues()
  };
  return false;
}

function getValue(sheet,addr){
  return sheet.getRange(addr).getValue().toString().replace(/^\s+|\s+$/g, '');
}

function createACopy(id){
  var docName = DocsList.getFileById(id).getName();
  return DocsList.getFileById(id).makeCopy(docName).getUrl();
}

function insertInCurrent(id){
    var destinationSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
    var sourceSheets = SpreadsheetApp.openById(id).getSheets();
    for(var i=0;i<sourceSheets.length;i++){
        var sheetName = sourceSheets[i].getName();
        var source = SpreadsheetApp.openById(id).getSheetByName(sheetName);
        source.copyTo(destinationSpreadSheet).setName(sheetName);
    }
}

请你帮我一点或多少。

提前致谢

1 个答案:

答案 0 :(得分:1)

好的,所以我的代码实际上是正确的,但我的错误是我应该保存在新版本下对我的代码所做的任何更改,然后将其发布到商店,我没有,因此我所做的所有更改都是简单地忽略了

function onOpen(e) {
    SpreadsheetApp.getUi().createAddonMenu()
      .addItem('Browse Templates', 'browseTemplates')
      .addToUi();
}

function onInstall(e) {
  onOpen(e);
}