#google-apps-script #google-sheets
Вопрос:
Этот скрипт копирует и вставляет блок данных в ЛИСТЕ 1 в последнюю строку 1 в ЛИСТЕ 2.
Я хочу добавить цикл, чтобы для каждой строки данных на ЛИСТЕ 1 я мог указать целевую строку на ЛИСТЕ 2 вместо вставки блока в последнюю строку 1.
Например, у меня есть 5 строк данных в ЛИСТЕ 1 в ДИАПАЗОНЕ A1:E6.
- Колонка 1: Название
- Колонка 2: Дело #
- Col 3: Описание
- Кол 4: Дата
- Col 5: Ценность
- Col 6: Строка назначения в Листе2
Таким образом, если строка назначения обозначена как 50, строка перезапишет данные в строке 50 листа 2.
Следующая строка данных указывает строку назначения 73, так что строка данных хранится в строке 73 листа 2 и т.д…
function dataTransfer1() {
var ss = SpreadsheetApp.getActive(); //source sheet/this sheet
var tss = SpreadsheetApp.openById("oweoeIE8373JDJudjd8383Iwejfi83"); //destination sheet ID
var sh = ss.getSheetByName("ADD MISS 7") //name of subsheet w/in source sheet
var tsh = tss.getSheetByName("JR") //name of subsheet w/in destination sheet
var rowDestination = tsh.getLastRow() 1;
var numRows = ss.getRange("A1").getValues();
var copyRange = sh.getRange(2,14,numRows,5).getValues(); //source range
var dumpRange = tsh.getRange(rowDestination,1,numRows,5); //destination range
dumpRange.setValues(copyRange);
}
Ответ №1:
function dataTransfer1() {
var ss = SpreadsheetApp.getActive(); //source sheet/this sheet
var tss = SpreadsheetApp.openById("oweoeIE8373JDJudjd8383Iwejfi83"); //destination sheet ID
var sh = ss.getSheetByName("ADD MISS 7") //name of subsheet w/in source sheet
var tsh = tss.getSheetByName("JR") //name of subsheet w/in destination sheet
var values = sh.getDataRange().getValues();
var trange = tsh.getRange(1, 14, tsh.getLastRow(), 5);
var tvalues = trange.getValues();
for (const value of values) {
const i = value[5] - 1;
tvalues[i] = value.slice(0, -1);
}
trange.setValues(tvalues);
}
Ответ №2:
function copy2() {
const ss = SpreadsheetApp.getActive();
const sh1 = ss.getSheetByName('Sheet1');
const sh2 = ss.getSheetByName('Sheet2');
const vs1 = sh1.getRange(1, 1, 6, 6).getValues();
vs1.forEach(r => sh2.getRange(r[5], 1, 1, 5).setValues([r.slice(0, 5)]));
}