Stu*_*own 1 javascript google-sheets google-apps-script
我有一个谷歌应用程序脚本,它作为谷歌表格插件发布。该插件的功能之一是它获取单元格的值,查询 Google Big Query 表,并使用下拉选项填充下一个单元格。\xc2\xa0\xc2\xa0一旦用户选择一个选项另一个查询发送到 Big Query,依此类推。
\n因为此活动发生在用户编辑单元格\xc2\xa0 时,我认为我需要使用\xc2\xa0 onEdit()\xc2\xa0type 功能。然而,文档明确表明我可以\xe2\x80\x99t用来onEdit()发出需要授权的此类请求(我使用服务帐户),所以我需要使用触发器,并且因为它\xe2\x80\x99s用于附加我需要使用可安装的触发器。
我按照文档\xc2\xa0以编程方式执行此操作
\n/**\n\xc2\xa0* Creates a trigger for when a spreadsheet opens.\n\xc2\xa0*/\nfunction createSpreadsheetOpenTrigger() {\n\xc2\xa0 var ss = SpreadsheetApp.getActive();\n\xc2\xa0 ScriptApp.newTrigger(\'stu\')\n\xc2\xa0 \xc2\xa0 \xc2\xa0 .forSpreadsheet(ss)\n\xc2\xa0 \xc2\xa0 \xc2\xa0 .onEdit() //the docs actually is onOpen()\n\xc2\xa0 \xc2\xa0 \xc2\xa0 .create();\n}\nRun Code Online (Sandbox Code Playgroud)\n反过来,函数stu从单元格获取值并调用另一个查询 Big Query 的函数:
function stu(e) {\n var activeCell = e.range;\n var cellValue = e.value;\n....\n....\nif (wsName === "Targets" && c < 7 && r > 1) {\n var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Targets");\n var rowValues = ws.getRange(r, 1, 1, 6).getValues();\n runQuery(cellValue, r, nextCol, rowValues); // runQuery executes the BigQuery query\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n我遇到了几个问题:
\n当用户安装附加组件时,似乎无法安装可安装的触发器。\xc2\xa0\xc2\xa0为了解决这个问题,我遵循了\xc2\xa0https://stackoverflow.com/questions 上的建议/61314827/install-trigger-for-google-app-script-in-custom-addon\xc2\xa0 并添加了一个菜单项以允许用户安装触发器。
\n我开始收到诸如Exception: This add-on has created too many edit triggers in this document for this Google user account.\xc2\xa0\xc2\xa0之类的错误
任何人都可以建议我在编辑上创建可安装触发器是否正确
\nScriptApp.newTrigger(\'stu\')\n \xc2\xa0 \xc2\xa0 \xc2\xa0 .forSpreadsheet(ss)\n \xc2\xa0 \xc2\xa0 \xc2\xa0 .onEdit()\n \xc2\xa0 \xc2\xa0 \xc2\xa0 .create();\nRun Code Online (Sandbox Code Playgroud)\n也许我应该使用
\nScriptApp.newTrigger(\'stu\')\n \xc2\xa0 \xc2\xa0 \xc2\xa0 .forSpreadsheet(ss)\n \xc2\xa0 \xc2\xa0 \xc2\xa0 .onOpen()\n \xc2\xa0 \xc2\xa0 \xc2\xa0 .create();\nRun Code Online (Sandbox Code Playgroud)\n然后在函数中将stu功能包装在onEdit():
function stu(e) {\n onEdit(e) {\n var activeCell = e.range;\n var cellValue = e.value;\n ....\n ....\n if (wsName === "Targets" && c < 7 && r > 1) {\n var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Targets");\n var rowValues = ws.getRange(r, 1, 1, 6).getValues();\n runQuery(cellValue, r, nextCol, rowValues); // runQuery executes the BigQuery \n query\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n如果我正确使用可安装触发器,我是否应该删除以前的实例以避免Exception: This add-on has created too many edit triggers in this document for this Google user account.\xc2\xa0\xc2\xa0 错误?我可以看到有一种方法可以检查触发器是否存在并酌情删除(也在\xc2\xa0https://developers.google.com/apps-script/guides/triggers/installable#managing_triggers_manually)。\xc2 \xa0\xc2\xa0
我怀疑实际上我从根本上理解了应该如何使用可安装的触发器。我已通读文档,但非常感谢任何建议。\xc2\xa0
\n这只会产生一个:
function creatonedittrigger(funcname) {
if(ScriptApp.getProjectTriggers().filter(t => t.getHandlerFunction() == funcname).length == 0) {
ScriptApp.newTrigger(funcname).forSpreadsheet(SpreadsheetApp.getActive()).onEdit().create();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1331 次 |
| 最近记录: |