多参数匹配更新Google Spreadsheet行数据的Apps Script报错求助
问题解决方案
核心报错原因
你修改后的代码存在基础语法错误:Google Apps Script 遵循 JavaScript 语法规范,逻辑与的运算符是&&,并非你使用的and,这是脚本运行报错的直接诱因。
你补充EXPIRED、LOCATION双字段联合匹配的思路是完全正确的,可以解决重复SKU导致的错误更新首行的问题,只需要修正运算符即可正常运行。
修正后可运行代码
//Update if (e.parameter.func == "Update") { var sku = e.parameter.SKU; var exp = e.parameter.EXPIRED; var loc = e.parameter.LOCATION; var stat = e.parameter.STATUS; var lr= sh.getLastRow(); for(var i=1;i<=lr;i++){ var data_sku = sh.getRange(i, 1).getValue(); var data_exp = sh.getRange(i, 2).getValue(); var data_loc = sh.getRange(i, 3).getValue(); // 修正逻辑与运算符 if(data_sku == sku && data_exp == exp && data_loc == loc){ sh.getRange(i, 2).setValue(exp); sh.getRange(i, 3).setValue(loc); sh.getRange(i, 4).setValue(stat); return ContentService.createTextOutput("Successfully Updated").setMimeType(ContentService.MimeType.TEXT); } } // 可选补充:无匹配行时返回提示 return ContentService.createTextOutput("No matched row found").setMimeType(ContentService.MimeType.TEXT); }
可选优化建议
如果你的表格数据量较大,循环中反复调用getRange()、getValue()会导致运行效率低下,建议一次性读取全表数据后遍历判断,减少表格IO次数:
// 优化版:批量读取数据 if (e.parameter.func == "Update") { var sku = e.parameter.SKU; var exp = e.parameter.EXPIRED; var loc = e.parameter.LOCATION; var stat = e.parameter.STATUS; var lr= sh.getLastRow(); // 一次性读取前三列所有数据,减少IO调用 var allData = sh.getRange(1, 1, lr, 3).getValues(); for(var i=0;i<lr;i++){ var row = allData[i]; if(row[0] == sku && row[1] == exp && row[2] == loc){ sh.getRange(i+1, 4).setValue(stat); return ContentService.createTextOutput("Successfully Updated").setMimeType(ContentService.MimeType.TEXT); } } return ContentService.createTextOutput("No matched row found").setMimeType(ContentService.MimeType.TEXT); }
内容的提问来源于stack exchange,提问作者Teguh Sampurna
相关产品推荐
相关产品推荐

