как переместить набор отфильтрованных данных на другой лист без перемещения функции фильтра?

#javascript #database #google-sheets

#javascript #База данных #google-sheets

Вопрос:

Я использовал filter function =FILTER(‘check-in’!A8:G,’check-in’!C8:C =C4), чтобы отфильтровать материал из моего листа ‘check-in’ в моем листе ‘check-out’ . Я также создал свой первый столбец ‘check-out’ таким образом, чтобы скопировать строку на лист с именем ‘database’, как только первый столбец строк содержит «y» (означает да). Это работает, но когда выбрана первая строка (которая включает функцию фильтра), она также копирует формулу, и после этого лист базы данных не будет хранить больше данных. Любые советы будут оценены.

 function onEdit(event) {
  assumes source data in sheet named Needed
  target sheet of move to named Acquired
  test column with yes/no is col 4 or D
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "check-out" amp;amp; r.getColumn() == 1 amp;amp; r.getValue() == "y") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Database");
    var target = targetSheet.getRange(targetSheet.getLastRow()   1, 1);
    s.getRange(row, 1, 1, numColumns).copyTo(target);
  

Ответ №1:

Вы можете копировать только значения:

CopyTo(назначение, параметры)

Копирует данные из диапазона ячеек в другой диапазон ячеек. По умолчанию копируются как значения, так и форматирование, но это можно переопределить с помощью дополнительных аргументов.

  // The code below will copy only the values of the first 5 columns over        
 // to the 6th column.
 var sheet = SpreadsheetApp.getActiveSheet();
 sheet.getRange("A:E").copyTo(sheet.getRange("F1"), {contentsOnly:true});
 }
  

в вашем случае:

 s.getRange(row, 1, 1, numColumns).copyTo(target, {contentsOnly:true});