如何根据特定的列条件将一些数据移至另一个选项卡

时间:2019-03-25 02:39:54

标签: 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 个答案:

答案 0 :(得分:0)

我更新了您的代码,使其包含您要从中复制值的列。请参见dataColumns数组。这是一个基于 1 的数组,这意味着col 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;
        }
      });
  });
}