我有一个Google表格来跟踪我想与公司中其他人共享的项目。我已经使用html表单开发了一个UI,该UI可以引导用户解决问题,以获得用于项目成本核算的必要数据。
可通过自定义菜单打开表单-这对我和其他用户(在本例中实际上是我使用其他Google帐户)都非常有用。
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('PROJECT COSTING TOOL')
.addItem('Create a New Proposal', 'newProposal')
.addItem('Create a New Version of this Proposal', 'copyProposal')
.addSubMenu(SpreadsheetApp.getUi().createMenu('Edit This Proposal')
.addItem('Edit Project Background', 'editBackground')
.addItem('Edit Project Complexity', 'editProject')
.addItem('Edit Category Complexity', 'editCategory'))
.addToUi();
}
例如,选择“编辑项目复杂性”将触发Apps脚本中的editProject功能。 “编辑类别复杂度”触发editCategory函数。两者都适合任何用户。
这些功能使用openForm打开html表单:
function editProject(curProp) {
console.log('Opening editProject for Project #' + curProp);
curProp = curProp || SpreadsheetApp.getActiveSpreadsheet().getRangeByName('CurrentProposal').getValue();
console.info('curProp is now ' + curProp);
var projRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName('Data_Projects');
openForm('frmProject', 'Edit Project Complexity',700,800,rowToJson(projRange,findRow(projRange,curProp)));
}
您可以看到代码检查是否通过e传递了项目编号,如果没有,则在Sheet本身中查找它。每个html表单中都有一些按钮,用于将更改保存到工作表,关闭表单并打开另一个表单(“下一个”或“上一个”)。这是我遇到麻烦的地方。对于本人和非所有者用户,保存和关闭功能都运行良好。当我触发editProject函数时,它也可以正常工作。但是它永远不会进入openForm。
function saveCategoryPrev(e) {
console.log('SaveCategoryPrev has been run: ' + e);
var projID = saveCategory(e);
console.info('saveCat is done. Back to sCP with Project #' + projID)
editProject(projID);
}
以我自己(所有者)的身份运行,效果很好。以另一个用户身份运行,直到openForm为止一切都正常,并且退出时没有错误。这是该情况下的日志:
D SaveCategoryPrev has been run: [[7,<other data>]] for proj [undefined
D SaveCategory has been run: [[7,<other data>]]
D project is 7
D Data Array = <some data>
D saveCategory: 537ms
I saveCat is done. Back to sCP with Project #7
D Opening editProject for Project #undefined
I curProp is now 7
当我以自己的身份运行它时,您会看到触发了下一步:
D SaveCategoryPrev has been run: [[7,<other data>]] for proj [undefined]
D SaveCategory has been run: [[7,<other data>]]
D project is 7
D Data Array = <some data>
D saveCategory: 370ms
I saveCat is done. Back to sCP with Project #7
D Opening editProject for Project #7
I curProp is now 7
D onLoad = {"Proposal ID":7,"Opportunity ID":"","Ver #":1,"Project Start":"2019-05-01T04:00:00.000Z","Duration (mo)":2,"Sales Engineer":"...}
openForm:
function openForm(formName, formTitle, fmHeight, fmWidth, paramData) {
fmHeight = fmHeight || "450";
fmWidth = fmWidth || "800";
var html = HtmlService.createHtmlOutputFromFile(formName).setHeight(parseInt(fmHeight)).setWidth(parseInt(fmWidth));
if (paramData) {html.append("<div id='gsParam' style='display:none;'>" + paramData + "</div>");}
SpreadsheetApp.getUi().showModalDialog(html, formTitle);
}
我想念什么?我自己和另一个接受授权的用户之间有什么区别?使用菜单打开表单和通过代码打开表单有什么区别?