首页 文章

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

提问于
浏览
0

可能的原因如下:

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

最常见的罪魁祸首是代码中的一个全局变量,它试图在未经授权的情况下访问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 回答

  • 1

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

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

相关问题