Google Apps Script操作谷歌表格仅获取指定列数据的实现问题咨询
解决方案
你不需要换用getRangeList()方法,直接在原有代码基础上增加列过滤规则即可,修改后仍可保持原有功能逻辑不变,仅返回你需要的指定列数据。
以下是修改后的代码,你可以根据实际需求调整配置项里的列规则:
function getSecondData(moveId){ // 配置区:两种规则二选一即可 // 方式1:填写要排除的列索引(索引从0开始,对应表格第1列,举例:要排除第6、第8列就填[5,7]) const excludedColumns = [5,7]; // 方式2:如果要指定仅保留的列,就把上面注释掉,用下面这行,举例仅保留第5、7、9列就填[4,6,8] // const allowedColumns = [4,6,8]; if(moveId == undefined) moveId = 14; var secondSS = SpreadsheetApp.openById(ss2); var secondSh = secondSS.getSheetByName('Moves'); var Data = secondSh.getDataRange().getValues(); // 先拉取全部表头再过滤 var allActorName = secondSh.getRange(1,5,1,secondSh.getLastColumn()).getValues()[0]; var actorName = []; // 过滤表头 for(let i=0; i<allActorName.length; i++){ const originalColumnIndex = 4 + i; // 对应整表的列索引,表头从第5列开始,索引为4 // 用方式1排除列时启用该判断 if(!excludedColumns.includes(originalColumnIndex)){ actorName.push(allActorName[i]); } // 用方式2指定保留列时启用该判断,注释上面的判断 // if(allowedColumns.includes(originalColumnIndex)){ // actorName.push(allActorName[i]); // } } Data.splice(0,1); var tmpData = []; for(var x=0 ; x<Data.length ; x++){ if(Data[x][3] == moveId){ tmpData.push(Data[x]); } } var finalData = []; let finalIndex = 1; for(var x=0 ; x<tmpData.length ; x++){ for(var y=4 ; y<tmpData[x].length ; y++){ // 列过滤判断,和上方规则保持一致 // 方式1排除列时启用 if(tmpData[x][y] != '' && !excludedColumns.includes(y)){ finalData[finalIndex] = tmpData[x][y]+'^'+tmpData[x][0]; finalIndex++; } // 方式2保留列时启用,注释上面的判断 // if(tmpData[x][y] != '' && allowedColumns.includes(y)){ // finalData[finalIndex] = tmpData[x][y]+'^'+tmpData[x][0]; // finalIndex++; // } } } return {'data':finalData,'move':moveId,'files':[actorName]} }
改动说明
- 新增两种列过滤规则,可根据实际需求选择排除不需要的列,或者直接指定仅保留的列
- 同步过滤返回的表头和内容,保证两者的顺序和数量完全对应
- 调整了finalData的下标逻辑,避免过滤后出现数组空位,兼容原有调用逻辑
内容的提问来源于stack exchange,提问作者Nick390
相关产品推荐
相关产品推荐

