Google Sheets导入数据前如何筛选Column2以'41'开头的Cost centers?
问题原因与修正方案
原有代码错误点
startsWith()是字符串实例的方法,你错误地在新建的空字符串String()上调用该方法,而非在你要判断的Item[1](Column2对应值)上调用startsWith()的参数需要直接传入目标前缀字符串'41',不需要包裹数组- 未做类型兼容:如果成本中心被存储为数字格式,直接调用字符串方法会触发报错,需要先统一转成字符串再判断
修正后的过滤逻辑
你只需要替换原有databasis赋值的那一行即可,修改后代码如下:
// 过滤逻辑:将Column2值转字符串后判断是否以41开头,空值自动过滤 var databasis = rangeValues.filter(function(Item){ return Item[1] && Item[1].toString().startsWith('41'); });
如果你需要保留原表的表头行(第一行不参与过滤直接保留),可以用以下写法:
var databasis = rangeValues.filter(function(Item, index){ // 第一行是表头直接保留,其余行判断过滤条件 return index === 0 || (Item[1] && Item[1].toString().startsWith('41')); });
完整可运行代码参考
// 获取当前活动表 var sheet = SpreadsheetApp.getActiveSheet(); // 通过ID读取Drive中存储的目标表格 var employeeActuals = SpreadsheetApp.openById( "1yL_0eB9b6CQLOshjPglDA-MnP2HZdLeIrKh4DO-qN0c" ); // 读取目标表格Overview页的全量数据 var employeeActualsSheet = employeeActuals.getSheetByName("Overview") var range = employeeActualsSheet.getDataRange(); var rangeValues = range.getValues(); // 修正后的过滤逻辑,保留表头 var databasis = rangeValues.filter(function(Item, index){ return index === 0 || (Item[1] && Item[1].toString().startsWith('41')); }); Logger.log(databasis); // 后续写入新表可参考以下代码 // if(databasis.length > 0){ // sheet.getRange(1, 1, databasis.length, databasis[0].length).setValues(databasis); // }
内容的提问来源于stack exchange,提问作者Julia Neugebauer
相关产品推荐
相关产品推荐

