Как переместить некоторые данные на другую вкладку на основе определенных критериев столбца

#google-apps-script

#google-apps-script

Вопрос:

В настоящее время я использую этот код для перемещения некоторых строк, если столбец 6 содержит «NA»

 function MoveNA() {

    var s, targetSheet, found;
    var s = SpreadsheetApp.getActive();
    var allsheets = s.getSheets();
    for(var s in allsheets){
    var s = allsheets[s];

    // Stop iteration execution if the condition is meet.
    if(
       (s.getName() == "Search") || 
       (s.getName() == "xx") || 
       (s.getName() == "NA")|| 
       (s.getName() == "Inventory") 
      ) continue;

    targetSheet = SpreadsheetApp.getActive()
        .getSheetByName("NA"),

    found = 0,
    s.getDataRange()
        .offset(1, 0)
        .getValues()
        .forEach(function (r, i) {
            if (r[5] == 'NA') {
                sourceRange = s.getRange((i   2) - found, 1, 1, s.getLastColumn());
                targetSheet.appendRow(sourceRange.getDisplayValues()[0])
                s.deleteRow((i   2) - found);
                found  = 1;
              SetFormulasNA();
            } 
        })
}
}
  

Я не знаю, как обновить код, чтобы переместить только данные в столбцах: B, K, L, M, N, O, P

Я хочу скопировать как значения, а не формулы

Все остальные данные в исходной строке я не хочу перемещать

Пожалуйста, любая помощь?

Ответ №1:

Я обновил ваш код, чтобы включить столбцы, из которых вы хотите скопировать значения. Смотрите dataColumns array. Это массив на основе 1, что означает, что столбец B равен 2, и так далее. Это только копирует значения в конечный лист и не удаляет строки из исходного листа.

 function MoveNA() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();

  // destination sheet
  var desSheet = ss.getSheetByName('NA');

  // sheets to exclude
  var excludes = ['Search', 'xx', 'NA', 'Inventory'];

  // which cols to copy values from
  var dataColumns = [2, 11, 12, 13, 14, 15, 16];

  // copy values
  sheets.forEach(function(sheet) {
    // check sheet is not in excludes
    if (excludes.indexOf(sheet.getName()) != -1) return;

    var found = 0;
    sheet
      .getDataRange()
      .getValues()
      .forEach(function(row, i) {
        // check condition
        if (row[5] == 'NA') {
          row.forEach(function(val, j) {
            if (dataColumns.indexOf(j   1) != -1) return;
            row[j] = '';
          });
          desSheet.appendRow(row);
          // delete source row
          // sheet.deleteRow(i   1 - found);
          // found  = 1;
        }
      });
  });
}
  

Комментарии:

1. Я получаю, что координаты или размеры диапазона недопустимы. (строка 34, файл «Переместить в NA»)

2. и мне действительно нужно удалить строки из исходного листа. один раз перемещается, пожалуйста

3. протестируйте новый код, если он работает, включите удаление кода, раскомментировав

4. Я все еще получаю, что координаты или размеры диапазона недопустимы. (строка 38)

5. странно. попробуйте еще раз сейчас