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
相关产品推荐
相关产品推荐

