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

Google Apps Script校验相邻单元格匹配后按目录推送数据到指定ID的Sheet

请注意,我可能是想复杂了。
我在梳理该场景的实现方案时一直陷入循环思考,因此我将说明我的思路和当前进展:

  • 在Google Sheets中填写表单
  • 表单答复会被添加到主表单页的 form responses tab 中
    表单答复页
  • 代码触发运行,校验表单填写是否正确(A列和B列值匹配)
    校验逻辑示意图
  • 若两列值匹配,通过查询 directory tab 获取该行数据需要推送的对应Google Spreadsheet ID
    目录页查询逻辑示意图
  • 将该行数据推送至对应Sheet中的对应列表中
    数据推送逻辑示意图
  • 循环校验Main QA Forms Responses tab下的所有行,直到所有条目都处理完毕。

我花了数小时研究该需求,但可能我的实现思路存在偏差。目前我编写的代码如下:

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var r = s.getActiveRange();
  var columnSearchNum = 3;
  var columnDatastarts = "C";

  var formSheetName = "QA Form Responses";
  var directorySheetName = "Program Directory";
  var matchingProgramSheetIDColumn = 1;

  if(s.getName() == formSheetName && r.getColumn(0) == r.getColumn(1)) {
    var sourceRow = r.getRow();
    var matchingProgram = sourceRow.getRange(0,0).getValue();

    var matchingProgramSheetID = s.getName(Programdirectory)....//[待补充代码1]
    //^^^^ 此处需要实现:根据匹配到的项目字符串,拉取对应表ID列的数据
    //从这一步开始跳转至对应「项目表」

    var programSheet = ss.getSheetByID(matchingProgramSheetID);
    var programSheetNumRows = programSheet.getLastRow();
    //console.log(programSheetNumRows);
    var formSheetNumColumns = s.getLastColumn();
    var targetRange = programSheet.getActiveRange()
    var targetValue = +s.getRange(columnDatastarts+sourceRow).getValue()
    //console.log(targetValue);
    var programSheetRange = programSheet.getRange(1,columnSearchNum,programSheetNumRows,1);
    //console.log(programSheetRange.getNumRows() +" " +programSheetRange.getNumColumns() + " " + programSheetRange.getValues());
    var targetRow = findIndex(programSheetRange.getValues(), targetValue);
    //console.log(targetRow);
    var target = programSheet.getRange(targetRow, 1);
    s.getRange(sourceRow, 2, 1, formSheetNumColumns).moveTo(target);
  }
}

function findIndex(array, search){
  //console.log(array);
  if(search == "") return false;
  for (var i=0; i<array.length; i++){
    //console.log("comparing " + +array[i] + " to "+ +search);
    if (+array[i] == +search){ 
      return i+1;
    }
  }
  return -1;
} 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:27:03