Google 带有 Google 应用程序脚本的工作表:如何在返回最终结果之前向单元格写入 'status' 消息?

Google Sheets with Google App Script: How to write a 'status' message to the cell before returning the final result?

我有一个函数可能需要一段时间才能 return 输出。有没有办法让它在单元格中打印一条消息,然后在短时间内用输出覆盖消息?该函数可能需要 30 秒才能 运行 并且它可以在 20-30 个单元格中使用,因此很高兴看到哪个单元格仍在计算以及哪个单元格已完成。

function do_calc() {
  print("Now doing the calculations...")

// ... (bunch of code here that does the calculations)

  return output;
}

我尝试使用 setvalue(),但它说我无权在自定义函数中执行此操作。

更新:添加了图片 screenshot

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var active_range = sheet.getActiveRange();
  sheet.getRange(active_range.getRowIndex(), 10).setValue('Running...');
  Utilities.sleep(10000);
  return 'Finished';
}

问题:

正如我在评论中所说,你不能 return 两次,因为第一个 return 语句会抵消后面的代码。

  • 自定义函数中也不允许设置方法(如 setValue),如 official documentation 中明确说明的那样。

解决方案:

解决方案是合并内置的 google 工作表公式 IFERROR

=iferror(myFunction(),"Running...")

其中 myFunction 是:

function myFunction() {
  try{
    // some code that delays
    Utilities.sleep(10000);
  }
  catch(e){
    return e.message;
  } 
  return 'Finished';
}

我添加了 try...catch 以确保您 return 与脚本相关的错误消息。否则,iferror 将隐藏它们。

小心!

自定义函数调用必须 return 在 30 秒内 。如果超过此时间,则自定义函数将 return 错误:

Exceeded maximum execution time

不会显示,因为您使用了 iferror 来弥补错误。