表单:通过表单脚本查找时防止缓存单元格值

时间:2017-08-07 04:24:15

标签: google-apps-script google-sheets google-form

我有一个Google表单,我已经使用“on open”事件触发的应用程序脚本进行了扩充。该脚本(见下文)使用源表中的值更新表单描述,并按预期工作。

提交表单时会出现问题,然后生成新的“问题”。由于表单更新了表单,我希望新问题在说明中显示更新的值。但它显示了之前(过时的)值。

我可以通过在脚本编辑器中“运行”脚本来强制更新值。

是否有解决方法来阻止表单缓存值?

脚本:

function DisplayBalanceInDescription() {
  var form = FormApp.getActiveForm();
  var ss = SpreadsheetApp.openById(form.getDestinationId()).getSheetByName('sheet 1');
  var data = ss.getDataRange().getValues();
  var balance = data[0][6]; // first row, 7th column
  form.setDescription("Current account balance is $" + balance);
}

一些额外的细节:

  • 即使第一次在其他浏览器中查看表单,该值也会被缓存,因此浏览器不会缓存该值
  • 通过查询功能将表单的目标工作表复制到另一个工作表
  • 保存“余额”的单元格是基于“复制”表格(上图)的计算
  • 似乎不需要打开/查看工作表,因为只需运行脚本就会导致更新值(工作表未运行时打开)
  • 我尝试在我的脚本函数中添加cell.setFormula("=QUERY('foo bar')),认为我需要触发查询,但这对缓存没有影响,尽管运行没有任何语法错误
  • (基于评论进行编辑)手动编辑电子表格然后退出(因此保存)也会导致表单缓存旧值,因此表单应用程序正在执行自己的缓存而不是工作表应用程序 - 我认为读取工作表数据(.getValues()或其附近)的调用是缓存发生的地方......

0 个答案:

没有答案