Скопируйте и вставьте ячейку в первую пустую строку в Specifi c Column таблицы Google - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь скопировать и вставить значения ячейки J3 из отчета о деятельности в первую пустую ячейку в столбце L.

Ячейка для копирования фиксирована, но ячейка для вставки является переменной.

До сих пор код, который я использую, мог только скопировать значения из J3 в последнюю строку столбца L вместо первой пустой строки сверху. Любая попытка изменить место назначения не увенчалась успехом. Мне удалось вставить его вверху, но он продолжал перезаписывать ту же самую ячейку.

   function copyData() {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sName = ss.getSheetName();

if (sName == 'Activity Report'){
  var source = ss.getRange("Activity Report!J3");
  var destSheet = ss.getSheetByName("Activity Report");
  var lastRow = destSheet.getLastRow();

  var destination = destSheet.getRange("L"+lastRow);
  destination.activate();
  source.copyTo(destination, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  };
}

Заранее спасибо!

1 Ответ

1 голос
/ 28 мая 2020

Копирование данных в первую пустую ячейку в столбце L

Копирование значения из J3 в нижнюю часть столбца L

function copyData() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Activity Report');
  sh.getRange(sh.getLastRow()+1,12).setValue(sh.getRange(3,10).getValue());
}

Попробуйте следующее:

Это поместит его в самую первую пустую ячейку в столбце L, которая может быть lastRow () + 1, если нет пробелов.

function runOne() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Activity Report');
  var f=false;
  var L=sh.getRange(1,12,sh.getLastRow()+1,1).getValues().map(function(r,i){if(!f && r[0].toString().length==0){f=true;return i+1;}else{return '';}}).filter(function(e){return e;});
  sh.getRange(L,12).setValue(sh.getRange(3,10).getValue());
}

Здесь используется сокращение:

Во всяком случае, это немного проще.

function copyData() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Activity Report');
  var f=false;
  var L=sh.getRange(1,12,sh.getLastRow()+1,1).getValues().reduce(function(a,r,i){if(!f && r[0].toString().length==0){f=true;return a + i;}return a;},1);
  sh.getRange(L,12).setValue(sh.getRange(3,10).getValue());
}

Array.map

Array.filter

Array.reduce

...