目前我有以下脚本,当编辑单元格 D2 时会自动运行
我的问题是它需要 6-8 秒才能运行,但工作人员不知道它是否正在运行
当它开始说“运行脚本”时,我是否可以弹出一个窗口,就像将脚本分配给按钮一样?
函数 onEdit(e) { var Sheet = e.source.getSheetByName("Input1"); if (sheet && e.range.getA1Notation() === "D2") { searchData(); } }
function searchData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var inputSheet = ss.getSheetByName("Input1");
var dataSheet = ss.getSheetByName("Job Sheet");
var jobnumber = inputSheet.getRange("D2").getValue();
// Check if Job number field is empty
if (!jobnumber) {
SpreadsheetApp.getUi().alert('Enter a Job number.');
return;
}
var dataRange = dataSheet.getDataRange().getValues();
var found = false;
for (var i = 0; i < dataRange.length; i++) {
if (dataRange[i][0] == jobnumber) {
found = true;
inputSheet.getRange("D4").setValue(dataRange[i][1]);
inputSheet.getRange("D6").setValue(dataRange[i][2]);
inputSheet.getRange("D8").setValue(dataRange[i][3]);
inputSheet.getRange("D10").setValue(dataRange[i][4]);
inputSheet.getRange("D12").setValue(dataRange[i][5]);
inputSheet.getRange("D14").setValue(dataRange[i][6]);
inputSheet.getRange("D16").setValue(dataRange[i][7]);
inputSheet.getRange("D18").setValue(dataRange[i][8]);
inputSheet.getRange("D20").setValue(dataRange[i][9]);
inputSheet.getRange("D22").setValue(dataRange[i][10]);
inputSheet.getRange("D24").setValue(dataRange[i][11]);
inputSheet.getRange("D26").setValue(dataRange[i][13]);
inputSheet.getRange("D28").setValue(dataRange[i][14]);
inputSheet.getRange("D30").setValue(dataRange[i][15]);
inputSheet.getRange("A34").setValue(jobnumber);
break;
}
}
if (!found) {
SpreadsheetApp.getUi().alert('Job number not found.');
}
}
也许你可以使用
"toast"
它在右下角运行一个小框。你可以设置这些参数:像这样:
您不能将其设置为等到该过程完成,但用户会知道它已完成。
另一个选项是使用单元格作为用户的参考。在代码的开头,你可以写类似这样的代码:
在 searchData 的末尾:
onEdit() 运行代码状态的自定义对话框
您当前的目标无法直接通过 Google Apps Script 实现。但是,有一些变通方法可以实现这一点。实际上,这可以通过尝试使用自定义对话框、Web 应用的 OnSuccessHandler 和可安装触发器来实现。
注意:我确实认为可以使用简单触发器 onEdit(e) 来完成,但是结合 ShowModalDialog 和 onEdit(e) 存在一个持续的错误,目前它仍然会产生授权范围错误
示例代码
代码.gs
索引.html
自述
要实现这一点,您需要将函数替换
sampleTask()
为您希望通知等待的函数(在您的情况下是)searchData()
。请更改 HTML 并根据要运行的函数更改名称。 onSuccessHandler 等待返回的数据,这意味着您的函数需要返回一些内容,以便它可以在 HTML 上运行更改。在这种情况下,我只是将通知更改为在函数运行完成后处理完成。可安装触发器- 这几乎与您的 onEdit(e) 相同,唯一的区别是您必须安装它,并且您可以通过修改清单来更好地控制授权。您可以在此处阅读有关可安装触发器的更多信息。
手动管理触发器的步骤
打开您的 Apps 脚本项目。
在左侧,单击触发器。
在右下角,单击添加触发器。
选择并配置您想要创建的触发器类型。
单击保存。
应该运行的函数是
showLoadingDialog
事件类型应该是onEdit
。参考:
对话框 - Apps 脚本
可安装触发器 - Apps 脚本
onSuccess 处理程序 - Apps 脚本