我正在制作一个相互链接的原材料库存电子表格和酿造日志,我希望能够通过单击将当前库存拉入酿造日志表。
我已经将 importRawMat 函数连接到按钮“Boop”,该函数可以很好地导入我需要的数据,但我没有成功地将其链接到 onEdit 的复选框单击,尽管 onEdit 触发了“清除” ' 功能很好。
我想知道这是否与简单触发器受限于需要授权的服务有关?如果是这样,我如何才能触发此功能,该功能可通过 Google Sheets 应用程序访问,因为按钮和自定义菜单无法通过那里工作。
请参阅下面的链接和代码:
function onEdit(e) {
if (!e.value) return
if (e.value !== "TRUE") return
if (e.range.rowStart !== 1) return
if (e.range.columnStart !== 1) return
if (e.range.getSheet().getName() !== "Brew") return
importRawMat()
}
function onEdit(e) {
if (!e.value) return
if (e.value !== "TRUE") return
if (e.range.rowStart !== 2) return
if (e.range.columnStart !== 3) return
if (e.range.getSheet().getName() !== "Brew") return
Clear()
e.range.uncheck()
}
function Clear() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRangeList(['A1', 'A1']).activate()
.uncheck();
};
function importRawMat() {
var originsheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1GOmX04m8OC1dFWFdhBonLTt07SImkq6gGx5l9l6SSXA/edit?gid=411516577#gid=411516577').getSheetByName('Malt');
var origindata = originsheet.getDataRange().getValues();
var destinationsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Blank');
destinationsheet.clearContents();destinationsheet.getRange(1,1,origindata.length,origindata[0].length).setValues(origindata);
}
onEdit
不能用于SpreadsheetApp.openByUrl
。我不确定您是否使用问题中的可安装 OnEdit 触发器。所以,我猜测这可能是几个修改点之一。onEdit
。在这种情况下,脚本无法正确运行。当这些要点反映在你的放映脚本中时,就会变成如下所示。
请执行以下流程。
onEdit
函数。installedOnEdit
。 参考通过此流程,当您选中 Brew 表的“A1”或“C2”复选框时,功能
installedOnEdit
将由可安装的 OnEdit 触发器自动运行。
function installedOnEdit(e) {
const { range } = e;
const sheet = range.getSheet();
if (range.isBlank() || !range.isChecked()) return;
if (range.rowStart == 1 && range.columnStart == 1 && sheet.getName() == "Brew") {
importRawMat();
} else if (range.rowStart == 2 && range.columnStart == 3 && sheet.getName() == "Brew") {
Clear();
range.uncheck();
}
}
onEdit
函数。另外,此脚本假设您的函数 Clear()
和 importRawMat()
工作正常。请注意这一点。