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对象动态创建的
我正在努力寻找一种无需重新授权即可处理所有文档的方法
解决方案要求:
onOpen
)- 积极的
- 我可以用doPost获取json
- 底片
- 选择标记时,新复制的文档需要授权才能运行脚本
- 在将Word文档上传/转换为Google文档时,我需要将内容传输到另一个包含绑定脚本的Google文档
- 积极的
- 所有文档上的脚本
- 无需授权即可为新文档运行脚本
- 无需将内容从一个文档转移到另一个文档
- 底片
- 我不知道如何获取json obj(加载项中不允许使用doPost()
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)。我去看看。谢谢