如何在Google Apps Script中将valores数组值粘贴到valValues指定位置
解决数组值从指定位置填充的问题
要将valores数组的内容填充到valValues数组每个子数组的第3到第15位(对应数组索引2到14),可以按照以下逻辑实现:
核心处理逻辑
- 由于
valValues和valores是在同一个forEach循环中生成的,两者长度完全匹配,可按索引一一对应处理 - 对每个
valValues的子数组,从索引2(第3个元素)开始,依次替换为valores对应子数组的元素 - 自动适配长度差异:如果
valores的子数组元素不足13个(第3到15位共13个位置),剩余位置保留空白;如果元素超出13个,仅取前13个填充
修改后的完整代码片段
在现有代码的Logger.log语句前,添加填充逻辑并补充写回表格的操作:
function importarTareasGlobal23(){ ... // 原有代码 var filasDestino = sheetCalendario.getRangeList(['E4:E18', 'H4:H18', 'K4:K18', 'N4:N18', 'Q4:Q18', 'T4:T18', 'W4:W18', 'E20:E34', 'H20:H34', 'K20:K34', 'N20:N34', 'Q20:Q34', 'T20:T34', 'W20:W34', 'E36:E50', 'H36:H50', 'K36:K50', 'N36:N50', 'Q36:Q50', 'T36:T50', 'W36:W50', 'E52:E66', 'H52:H66', 'K52:K66', 'N52:N66', 'Q52:Q66', 'T52:T66', 'W52:W66', 'E68:E82', 'H68:H82', 'K68:K82', 'N68:N82', 'Q68:Q82', 'T68:T82', 'W68:W82', 'E84:E98', 'H84:H98', 'K84:K98', 'N84:N98', 'Q84:Q98', 'T84:T98', 'W84:W98']); var filasDestinoVal = filasDestino.getRanges(); var tabladebusquedaVal = sheetTareas.getRange("B5:H" + lastRowTareas).getValues(); var valValues = []; var valores = []; filasDestinoVal.forEach(row => { var val = row.getValues(); valValues.push(val); ... // 原有代码 var resultados = []; tabladebusquedaVal.forEach(r => { ... // 原有代码 if ( ... ) { resultados.push([icoTarea]); } }); valores.push(resultados); }); // --- 新增填充逻辑 --- for (let i = 0; i < valValues.length; i++) { const targetColumn = valValues[i]; const sourceTasks = valores[i]; // 遍历目标列的第3到第15位(索引2到14) for (let j = 2; j < targetColumn.length; j++) { const taskIndex = j - 2; if (sourceTasks[taskIndex]) { targetColumn[j] = sourceTasks[taskIndex]; } } } // 将修改后的数据写回表格对应区域 filasDestinoVal.forEach((range, index) => { range.setValues(valValues[index]); }); // --- 新增逻辑结束 --- Logger.log(valores); Logger.log(valValues); }
关键代码说明
- 外层循环按列遍历,确保每一列的
valValues和valores对应匹配 - 内层循环精准定位到第3到第15位的位置,将任务值逐一填充
- 最后通过
setValues方法将修改后的数组同步回Google表格的目标区域,完成数据更新
内容的提问来源于stack exchange,提问作者Nerea
相关产品推荐
相关产品推荐

