如何在特定范围后为每个 sheet 复制特定范围,而不仅仅是一个值

How to copy over a specific range for every sheet after a specific one, instead of just one value

我带着一个相当具体的问题来到这里,我自己无法完全弄明白,因为我可能 运行 对此有点语言障碍。

本质上,我有这个功能:

function moneyowened() {
  var out = new Array()
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  for (var i=2 ; i<sheets.length ; i++) out.push([sheets[i].getRange("a44").getValue()])
  return out 
}

它完美地实现了它的预期目的,因为它在第二个之后将每个 sheet 的每个值组成一个数组。现在,对于另一个项目,我想将其复制过来,因为它需要类似的任务。

区别在于:需要复制的目标是一个实际的取值范围。 (具体一行)

困难在于这个因素,因为我无法弄清楚如何让它实际应用于一系列值。它要么 returns 空白字段,要么只是第一个值。

我很自然地尝试应用“getValues”和不同的声明范围的方法,但是,我只得到一个空白行或我需要复制的行的第一个值。

解决这个问题的一种方法自然是简单地创建一个函数来独立获取每个值,但这将非常乏味,因此,我想问一下是否有我不知道的解决方案。

非常感谢您提供的任何帮助。

尝试过的变体列表:


for (var i=2 ; i<sheets.length ; i++) out.push([sheets[i].getRange("a44:z44").getValues()])

这会导致空白行

获取行

function getRow44() {
  var out = [];
  SpreadsheetApp.getActive.getSheets().forEach((sh, i) => {
    if (i > 1) out.push(sh.getRange(44,1,1,sh.getLastColumn()).getValues().flat());
  });
  console.log(JSON.stringify(out));
  return out;
}

这是一个很好的方法:

function getRow44() {

    return SpreadsheetApp.getActiveSpreadsheet()
                         .getSheets()
                         .slice(2)
                         .flatMap(i => i.getSheetValues(44, 1, 1, i.getLastColumn()))

}