如何在Google Apps Script二维数组中保留指定列
提取Google Apps Script数组指定列的解决方案
你需要从已获取的二维数组中提取指定列,这里要注意数组索引是从0开始的,你给出的列号是1-based(2、6、8、10、12、14),对应0-based的索引是1、5、7、9、11、13。下面提供两种可行方法:
方法1:直接获取指定列(推荐)
这种方法不用先拉取所有列再过滤,直接获取需要的列数据,效率更高,尤其适合数据量大的场景:
function REPART_HEURES_004() { var LISTE_PROJsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("0_LISTE PROJETS"); var LISTE_PROJStartRow = 5; var lrLISTE_PROJ = LISTE_PROJsheet.getLastRow(); // 目标列(1-based) var targetColumns = [2, 6, 8, 10, 12, 14]; var numRows = lrLISTE_PROJ - LISTE_PROJStartRow + 1; // 构造每个列的范围,批量获取数据 var rangeStrings = targetColumns.map(col => `${col}:${col}`); var rangeList = LISTE_PROJsheet.getRangeList(rangeStrings); var columnValues = rangeList.getRanges().map(range => range.getValues().slice(LISTE_PROJStartRow - 1, lrLISTE_PROJ) ); // 转置数组,把列数据转换成行数据 var LISTE_PROJ = columnValues[0].map((_, rowIdx) => columnValues.map(col => col[rowIdx][0]) ); Logger.log(LISTE_PROJ); }
方法2:过滤已获取的完整数组
如果已经拿到了全部数据,直接对数组做映射过滤即可:
function REPART_HEURES_004() { var LISTE_PROJsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("0_LISTE PROJETS"); var LISTE_PROJStartRow = 5; var lrLISTE_PROJ = LISTE_PROJsheet.getLastRow(); // 修正行数计算,避免多取空行 var rangeLISTE_PROJ = LISTE_PROJsheet.getRange( LISTE_PROJStartRow, 1, lrLISTE_PROJ - LISTE_PROJStartRow + 1, 15 ); var LISTE_PROJ = rangeLISTE_PROJ.getValues(); // 目标列索引(0-based,对应你要的1-based列) var targetIndices = [1, 5, 7, 9, 11, 13]; // 过滤每一行,只保留指定索引的元素 var filteredLISTE_PROJ = LISTE_PROJ.map(row => targetIndices.map(index => row[index]) ); Logger.log(filteredLISTE_PROJ); }
注意点
- 原代码中
lrLISTE_PROJ = getLastRow()+1会多取一行空行,已修正为直接用getLastRow(),并调整了行数计算逻辑。 - 两种方法最终都会得到你需要的格式,比如第一行结果为
[SMNK_KARLSRUHE, kikou, , , , false]。
内容的提问来源于stack exchange,提问作者emilianoSala
相关产品推荐
相关产品推荐

