Google apps script 使用谷歌应用程序脚本的谷歌工作表:如何编写';状态';是否在返回最终结果之前向单元格发送消息?
我有一个函数,返回输出可能需要一段时间。有没有办法让它先在单元格中打印消息,然后在短时间内用输出覆盖消息?该函数可能需要30秒才能运行,并且可能会在20-30个单元格中使用,因此最好能看到哪个单元格仍在计算,哪个单元格已完成Google apps script 使用谷歌应用程序脚本的谷歌工作表:如何编写';状态';是否在返回最终结果之前向单元格发送消息?,google-apps-script,google-sheets,custom-function,Google Apps Script,Google Sheets,Custom Function,我有一个函数,返回输出可能需要一段时间。有没有办法让它先在单元格中打印消息,然后在短时间内用输出覆盖消息?该函数可能需要30秒才能运行,并且可能会在20-30个单元格中使用,因此最好能看到哪个单元格仍在计算,哪个单元格已完成 function do_calc() { print("Now doing the calculations...") // ... (bunch of code here that does the calculations) return
function do_calc() {
print("Now doing the calculations...")
// ... (bunch of code here that does the calculations)
return output;
}
我试图使用setvalue(),但它说我没有权限在自定义函数中这样做
更新:添加图片
问题:
正如我在评论中所说的,您不能两次return
,因为第一个return
语句将抵消后面的代码
- 此外,自定义函数中不允许使用set方法(如
)setValue
myFunction
为:
function myFunction() {
try{
// some code that delays
Utilities.sleep(10000);
}
catch(e){
return e.message;
}
return 'Finished';
}
我添加了一个脚本,以确保返回与脚本相关的错误消息。否则,iferror
将隐藏它们
小心强>
自定义函数调用必须在30秒内返回。如果超过此时间,则自定义函数将返回错误:
超过最大执行时间
不会显示,因为您使用了将覆盖错误的iferror
。您不能返回两件事。只有一个或另一个。在调用do之前,可以对当前单元格执行setValue()_calc@Coopersetvalue()在GAS中根本不起作用,所以我不知道怎么做?我在这样的工作表中调用自定义函数:=do_calc()添加了屏幕截图和实际的codeWow@Marios,这是天才!成功了!我勾选了它,它起作用了,但我只是不知道为什么它起作用。它说,只有当函数返回错误时,IFERROR才会执行,但没有错误。@chiwal当函数计算内容时,它会在工作表中返回一些临时错误,这就是我们使用IFERROR
捕捉它的原因。
=iferror(myFunction(),"Running...")
function myFunction() {
try{
// some code that delays
Utilities.sleep(10000);
}
catch(e){
return e.message;
}
return 'Finished';
}