首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >App脚本:如何使用.getRangeList设置每个单元格的值?

App脚本:如何使用.getRangeList设置每个单元格的值?
EN

Stack Overflow用户
提问于 2022-03-18 18:14:05
回答 2查看 597关注 0票数 0

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

不幸的是,当我这样做时,它总是在我的目标表中的所有剩余单元上返回第一个单元格的值,而不是从源表中设置每个单个单元格的值。

这是我的密码:

代码语言:javascript
运行
复制
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中的所有单元格返回9的值,而不是从源表复制每个单元格的值。

我希望我正在努力完成的这件事在代码上是有意义的,PS。我真的是个初学者。谢谢大家!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-18 20:49:38

描述

RangeList是数组,而不是范围。我很惊讶你的剧本居然跑了。您必须使用Array.forEach来设置非连续范围的值。

您正在创建一个RangeList,然后获取每个范围的A1Notation。您可以简单地定义范围A1Notations的数组。

注意,我的试卷中有些名字和你的不一样。

脚本

代码语言:javascript
运行
复制
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);
  }
}

参考

票数 0
EN

Stack Overflow用户

发布于 2022-03-18 20:45:21

给游侠和价值观的游侠写信

代码语言:javascript
运行
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71531475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档