You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

表单提交时基于上一行设值异常:始终写入FALSE

问题分析与解决方案

问题根源

你的脚本始终写入FALSE的原因有两个核心问题:

  1. 直接比较Range对象而非单元格值:trgt.offset(0, -3)返回的是单元格Range对象,不是单元格内的实际值,和字符串"TRUE"比较永远不成立。
  2. 错误地将布尔值当作字符串比较:ARRAYFORMULA生成的布尔值是原生布尔类型(true/false),而非字符串"TRUE"/"FALSE"。另外表格的匈牙利语本地化只是界面显示为IGAZ/HAMIS,实际存储的还是true/false,所以用字符串匹配必然失败。

修正后的脚本

function onFormSubmit() {
  var s = SpreadsheetApp.getActiveSpreadsheet(); 
  var rcore = s.getSheetByName("test");
  var lastrow = rcore.getLastRow();

  var trgtRange = rcore.getRange(lastrow - 1, 9);
  if (trgtRange.getValue() === "") {
    // 一次性获取目标行左侧3个单元格的值(第6、7、8列)
    var leftCells = rcore.getRange(lastrow - 1, 6, 1, 3).getValues()[0];
    // 检查三个值是否全为true
    var allTrue = leftCells.every(val => val === true);
    // 直接写入布尔值,界面会自动按匈牙利语显示为IGAZ/HAMIS
    trgtRange.setValue(allTrue);
  }
}

关键修改说明

  • 批量获取单元格值:用getRange(lastrow -1,6,1,3).getValues()一次性获取三个单元格的值,减少Spreadsheet API调用次数,提升脚本运行效率。
  • 匹配原生布尔值:直接和true比较,而非字符串"TRUE",对应ARRAYFORMULA生成的布尔类型数据。
  • 简化判断逻辑:用数组的every()方法快速判断三个值是否全为true,代码更简洁。
  • 写入布尔值而非字符串:直接传入布尔变量allTrue,表格会根据匈牙利语环境自动显示为IGAZ(true)或HAMIS(false),无需手动写字符串。

内容的提问来源于stack exchange,提问作者davidw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 02:30:44