Как переместить некоторые данные на другую вкладку на основе определенных критериев столбца - PullRequest
0 голосов
/ 25 марта 2019

Я сейчас использую этот код для перемещения некоторых строк, если столбец 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 Ответ

0 голосов
/ 25 марта 2019

Я обновил ваш код, добавив в него столбцы, из которых вы хотите скопировать значения. Смотрите dataColumns массив. Это массив на основе 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;
        }
      });
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...