首页 > 解决方案 > 用于在 forEach 循环中复制和粘贴先前 i 值的 Google Apps 脚本功能

问题描述

我从第三方那里得到一份员工名单。有些员工每月有不止一张工资单。所以列表的一列是员工 ID,第二列是“子 ID”。

以下是员工和 ID 列表的示例:

我想在 Apps Script 中运行一个函数,该函数复制员工 ID 的值并将其粘贴到空白单元格上(这样我就可以进行一些计算)。

我为“Legajo”数组创建了一个循环,但是当我到达 if 语句时,我不知道如何获取先前的值并将其设置为空白项。

function fillFile() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("matriz");
  var numLegajos = sheet.getRange(3, 1, sheet.getLastRow() - 3).getValues();

  numLegajos.forEach(function(legajo,i) {

    if (legajo == "") {

      legajo = ?? // this is where I don't know what to do to get the previous value and set it to the blank item

  }

  Logger.log(legajo);

 });

}

标签: google-apps-scriptgoogle-sheets

解决方案


必读:

解决方案:

前一个值是主数组的i-1. 所以,你可以参考你在里面迭代的数组forEach

示例脚本:

numLegajos.forEach(function(legajoRow, i) {
  if (legajoRow[0] === '') {
    legajoRow[0] = numLegajos[i - 1][0]; //set previousValue to this row's column element
  }
  console.log(JSON.stringify(legajoRow));
});

或者,提供给 forEach 回调的第三个参数是主数组本身。function(legajoRow, i, arr). 所以,你也可以使用arr[i-1][0]

const numLegajos = /*Mock getValues()*/ [
  [12],
  [55],
  [''],
  [''],
  [11],
  [''],
  [''],
  ['']
];
numLegajos.forEach(function(legajoRow, i, arr) {
  if (legajoRow[0] === '') {
    legajoRow[0] = arr[i - 1][0]; //set previousValue to this row's column element
  }
});
console.log(JSON.stringify(numLegajos));


推荐阅读