Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 基于另一个源的JSON对象创建动态文档菜单和函数 我正在努力实现的目标:_Google Apps Script_Google Apps Script Addon - Fatal编程技术网

Google apps script 基于另一个源的JSON对象创建动态文档菜单和函数 我正在努力实现的目标:

Google apps script 基于另一个源的JSON对象创建动态文档菜单和函数 我正在努力实现的目标:,google-apps-script,google-apps-script-addon,Google Apps Script,Google Apps Script Addon,我想向文档中添加特定的标记(封装在{}之间) 这个标签列表是从我的主应用程序接收的JSON对象填充的 顶部栏菜单中充满了{Name}和{Phone}等标签,用户可以轻松地将它们添加到文档中。此菜单是使用json对象动态创建的 我正在努力寻找一种无需重新授权即可处理所有文档的方法 解决方案要求: 打开文档时接收json obj(onOpen) 基于该json对象创建菜单 跨多个文档工作 自动(无需手动步骤) 不能让Google请求授权在新创建的文档上运行脚本 匿名用户可以访问 迄今为止的尝试: 使

我想向文档中添加特定的标记(封装在
{}
之间)

这个标签列表是从我的主应用程序接收的JSON对象填充的

顶部栏菜单中充满了{Name}和{Phone}等标签,用户可以轻松地将它们添加到文档中。此菜单是使用json对象动态创建的

我正在努力寻找一种无需重新授权即可处理所有文档的方法

解决方案要求:
  • 打开文档时接收json obj(
    onOpen
  • 基于该json对象创建菜单
  • 跨多个文档工作
  • 自动(无需手动步骤)
  • 不能让Google请求授权在新创建的文档上运行脚本
  • 匿名用户可以访问
  • 迄今为止的尝试: 使用绑定脚本复制现有文档
    • 积极的
    • 我可以用doPost获取json
    • 底片
    • 选择标记时,新复制的文档需要授权才能运行脚本
    • 在将Word文档上传/转换为Google文档时,我需要将内容传输到另一个包含绑定脚本的Google文档
    创建附加组件
    • 积极的
    • 所有文档上的脚本
    • 无需授权即可为新文档运行脚本
    • 无需将内容从一个文档转移到另一个文档
    • 底片
    • 我不知道如何获取json obj(加载项中不允许使用doPost()
    另一个重要的注意事项是,我在脚本中使用eval为每个标记添加函数。这是必需的,因为菜单是动态创建的,不能向函数发送参数,所以我必须为每个标记动态创建一个新函数

    我认为如果我能以某种方式获得json,那么一个附加组件可能会起作用,但我不确定。可以将json作为url中的参数发送吗?我知道这在网络应用程序中是可能的,但无法通过附加组件解决。另外,eval在附加组件中的工作方式是否与在常规绑定脚本中的工作方式相同

    以下是我迄今为止的谷歌脚本:

    var tags = {"Name":"Tags","Items":[{"Type":"Menu","Name":"Contacts","Items":[{"Type":"Tags","Name":"Contact 1","Items":["{$Contact1_FirstName}","{$Contact1_LastName}","{$Contact1_FullName}","{$Contact1_Phone}","{$Contact1_Email}","{$Contact1_Mailing}"]},{"Type":"Tags","Name":"Contact 2","Items":["{$Contact2_FirstName}","{$Contact2_LastName}","{$Contact2_FullName}","{$Contact2_Phone}","{$Contact2_Email}","{$Contact2_Mailing}"]},{"Type":"Tags","Name":"Contact 3","Items":["{$Contact3_FirstName}","{$Contact3_LastName}","{$Contact3_FullName}","{$Contact3_Phone}","{$Contact3_Email}","{$Contact3_Mailing}"]},{"Type":"Tags","Name":"Contact 4","Items":["{$Contact4_FirstName}","{$Contact4_LastName}","{$Contact4_FullName}","{$Contact4_Phone}","{$Contact4_Email}","{$Contact4_Mailing}"]}]}]};
    var ui = DocumentApp.getUi();
    
    // Add Text Functions
    var addFunc   = '';
    var nAddText  = 0;
    var emptymenu = ui.createMenu(tags.Name);
    addMenu(ui, emptymenu, tags);
    eval(addFunc);
    
    
    function onOpen() {
      var menu = ui.createMenu(tags.Name);
      nAddText = 0;  
      addMenu(ui, menu, tags);
      menu.addToUi();
    }
    
    function addMenu(ui, menu, obj) {
      for(var item in obj.Items) {
        var subMenu = ui.createMenu(obj.Items[item].Name);
        var Type = obj.Items[item].Type;
    
        if(Type == "Menu") addMenu(ui, subMenu, obj.Items[item]);
        if(Type == "Tags") addTags(ui, subMenu, obj.Items[item]);
    
        menu.addSubMenu(subMenu);
      }
    }
    
    function addTags(ui, menu, obj) {
      for(var item in obj.Items) {
        menu.addItem(obj.Items[item], 'AddText' + nAddText);
        addFunc += 'function AddText' + nAddText + '() { AddText("' + obj.Items[item] + '"); }';
        nAddText++;
      }
    }
    
    function AddText(text) {  
      var doc = DocumentApp.getActiveDocument();
      var cursor = doc.getCursor();
      if (cursor) {
        var element = cursor.insertText(text)
        if (element) {
          var position = doc.newPosition(element, text.length);
          doc.setCursor(position);
        }
        else {
          DocumentApp.getUi().alert('Cannot insert text at this cursor location.');
        }
      } 
      else {
        DocumentApp.getUi().alert('Cannot find a cursor in the document.');
      }
    }
    

    对于所有文件,用于填充菜单的JSON对象是否始终相同?您是否考虑过使用UrlFetchApp通过get请求获取JSON对象?对于不同的文件,JSON obj通常是不同的。我还没有试过这个应用程序。我想我认为这是行不通的,因为插件不允许post请求(doPost)。我去看看。谢谢对于所有文件,用于填充菜单的JSON对象是否始终相同?您是否考虑过使用UrlFetchApp通过get请求获取JSON对象?对于不同的文件,JSON obj通常是不同的。我还没有试过这个应用程序。我想我认为这是行不通的,因为插件不允许post请求(doPost)。我去看看。谢谢