我正在使用.SetValues
来尝试填充我通过这一行var targetSheetRange = targetSheet.getRangeList(arr1);
选择的每个单元格。
不幸的是,当我这样做时,它总是在我的目标表中的所有剩余单元上返回第一个单元格的值,而不是从源表中设置每个单个单元格的值。
这是我的密码:
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。我真的是个初学者。谢谢大家!
发布于 2022-03-18 20:49:38
描述
RangeList是数组,而不是范围。我很惊讶你的剧本居然跑了。您必须使用Array.forEach来设置非连续范围的值。
您正在创建一个RangeList,然后获取每个范围的A1Notation。您可以简单地定义范围A1Notations的数组。
注意,我的试卷中有些名字和你的不一样。
脚本
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);
}
}
参考
发布于 2022-03-18 20:45:21
给游侠和价值观的游侠写信
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);
}
https://stackoverflow.com/questions/71531475
复制相似问题