当电子表格未打开时,包含自定义函数的单元格将返回“NaN”。 (Apps Script webapp访问谷歌电子表格)

时间:2013-05-17 17:33:58

标签: google-apps-script google-sheets

作为一名高中教师,我会将所有评分记录在Google电子表格中。我在电子表格中编写了可在电子表格中访问的自定义函数。一切正常。

我还有一个用谷歌应用程序脚本编写的简单(但独立)的网络应用程序,它总结了访问它的每个学生的成绩信息并将其返回到表格中。这已经完美运行了大约8个月。但是,学生在尝试检查成绩时会出现“NaN”错误。仅对使用自定义函数的单元格返回“NaN”。只需打开源电子表格,它就可以暂时解决问题。但在关闭电子表格后不久,webapp就开始再次返回“NaN”。

我假设它与何时/如何重新计算这些细胞有关,但我无法弄清楚如何在电子表格关闭时使细胞保持其值。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

根据Eric的建议,我实现了以下功能(在我的应用程序中尽早运行):

function refreshSheet(spreadsheet, sheet) {
  var dataArrayRange = sheet.getRange(1,1,sheet.getLastRow(),sheet.getLastColumn());
  var dataArray = dataArrayRange.getValues(); // necessary to refresh custom functions
  var nanFound = true;
  while(nanFound) {
    for(var i = 0; i < dataArray.length; i++) {
      if(dataArray[i].indexOf('#N/A') >= 0) {
        nanFound = true;
        dataArray = dataArrayRange.getValues();
        break;
      } // end if
      else if(i == dataArray.length - 1) nanFound = false;
    } // end for
  } // end while
}

它基本上不断刷新工作表(使用.getValues())直到所有#N / A都消失。它工作得非常好,但确实增加了一点滞后。

答案 1 :(得分:0)

只是添加我自己的评论:

我发现使用Google App Scripts从INDEX()和QUERY()等表函数填充的单元格中获取值的效果类似。

Eric关于使用getValues()而不是getValue()的评论可能会有所帮助。但我没有检查过。

我的问题的链接在这里:https://stackoverflow.com/questions/32519900/check-if-google-sheet-query-returned-rows?noredirect=1#comment53128587_32519900