Как добавить цикл FOR в этот код сценария Google?

#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)]));
}