应用程序脚本:如何使用 .getRangeList 设置每个单元格的值?

App Script: How to set the values of each cell using the .getRangeList?

我正在使用 .SetValues 尝试填充我通过此行选择的每个单元格 var targetSheetRange = targetSheet.getRangeList(arr1);

不幸的是,当我这样做时,它总是 return 将我的目标中所有剩余单元格的第一个单元格的值设置为 sheet,而不是设置每个单元格的值来源 Sheet.

这是我的代码:

function filtersCopyData() {

  var dTable = SpreadsheetApp.getActiveSpreadsheet();
  var sSheetDay = dTable.getSheetByName('Day 1'); // Source Sheet
  var sheetRange = sSheetDay.getRangeList(['K3','K4','K5','K6','K7']).getRanges().map(range => range.getValues()); 
  
  var targetSheet = dTable.getSheetByName('All Filters report'); // Target Sheet
  var arr1 = ['B4:C4', 'B6:C6', 'B7:C7', 'B9:C9', 'B10:C10'];
  var targetSheetRange = targetSheet.getRangeList(arr1);

  
  targetSheetRange.setValue(sheetRange); 



}

K3值为9,K4值为20,K5值为10,K6值为10,K7值为10

targetSheetRange.setValue(sheetRange);当此代码为运行时,arr1中的所有单元格return的值为9,而不是从Source中复制每个单元格的值Sheet.

我希望我试图完成的这件事对代码有意义,PS。我真的是初学者。谢谢大家!

正在使用值的范围列表写入范围列表

function filtersCopyData() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet0'); // Source Sheet
  const vs = sh.getRangeList(['K3','K4','K5','K6','K7']).getRanges().map(range => range.getValue()); 
  const tsh = ss.getSheetByName('Sheet1'); 
  const arr1 = ['B4:C4', 'B6:C6', 'B7:C7', 'B9:C9', 'B10:C10'];
  const rgl = breakUpRangeList(ss,tsh,tsh.getRangeList(arr1));
  const l = rgl.getRanges().length;
  rgl.getRanges().forEach((r,i) => {
    let a1 = r.getA1Notation();
    let idx = i % arr1.length;
    r.setValue(vs[idx]);
  });
}

function breakUpRangeList(ss=SpreadsheetApp.getActive(),sh=ss.getSheetByName("Sheet0"),rgl) {
  let b = [];
  rgl.getRanges().forEach(rg => {
    rg.getValues().forEach((r,i) => {
    let row = rg.getRow() + i;
    r.forEach((c, j) => {
      let col = rg.getColumn() + j;
      b.push(sh.getRange(row, col).getA1Notation())
    })
  })
})
  //Logger.log(JSON.stringify(b));
  return sh.getRangeList(b);
}

描述

RangeList 是数组而不是范围。我什至对你的脚本感到惊讶 运行。您必须使用 Array.forEach 来设置 non-contiguous 运行ges 的值。

您正在创建一个 RangeList,然后获取每个 运行ge 的 A1Notation。您可以简单地定义一个 运行ge A1Notations.

数组

请注意,在我的测试中,有些名称与您的名称不同 sheet。

脚本

function test() {
  try {
    var spread = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = spread.getSheetByName("Data");
    var rangeList = ["A1","A3","A5"];
    var values = rangeList.map( range => sheet.getRange(range).getValue() );
    rangeList = ["C1:D1","C3:D3","C5:D5"];
    rangeList.forEach( (range,index) => sheet.getRange(range).setValues([[values[index],values[index]]]));
  }
  catch(err) {
    console.log(err);
  }
}

参考