Как обновить дублирующую строку в Google Script - PullRequest
0 голосов
/ 29 января 2019

TeamB TeamA Мастер Я пытаюсь скопировать данные из мастер-листа в лист команд, разделенный по ключу1 [это работает], но код для проверки ключа2 не работает [обновитьстрока для дубликата и новая строка для не дубликата]

код: https://docs.google.com/document/d/1vqbwZqN4XLPmPhat0Jn4Vrg6POvlHfMiaIxfrYI4ajk/edit?usp=sharing

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Я немного изменил код, так что теперь он работает для TEAM-A.Вы можете сделать то же самое для Team-B. Пожалуйста, смотрите комментарии в коде.Я проверяю, есть ли текущее значение в листе, если нет, добавляю его в новый массив строк.

function MastertoBrance() {
  //Source SpreadSheet (MasterSpreadSheet)
  var mss = SpreadsheetApp.getActive();
  var mim = mss.getSheetByName("Master"); //Master in Master
  var Tim1 = mss.getSheetByName("TEAM-A"); //Team in Master1
  var Tim2 = mss.getSheetByName("TEAM-B"); //Team in Master2

  // KeepValues (Row,Column,NumRows,NumCols)
  var mdata = mim.getRange(3,2,mim.getLastRow() -1,mim.getLastColumn()).getValues();
  var Tim1data = Tim1.getRange(3,2,Tim1.getLastRow() -1,Tim1.getLastColumn()).getValues();

  var aaa =[];
  var bbb =[];

  for (var i = 0; i < mdata.length; i++) {

    var rValue = mdata[i][3];//4 = No.Column for monitor(E column) keepStartcol2 E=3

    if (rValue == "Team-A") {
      aaa.push(mdata[i]);
    } else if (rValue == "Team-B") {
      bbb.push(mdata[i]);
    }
  }

  if(aaa.length > 0) {
    var newRows = [];

    aaa.forEach(function (row) {
      Logger.log(row);
      var updated = false;
      if(Tim1data.length > 0) {
        Tim1data.some(function (existingRow, idx) {

          // check we found the same row
          if (row[0] === existingRow[0]) {            

            // update row
            // +3 skips the header rows
            Tim1.getRange(idx+3,2,1,row.length).setValues([row]);

            // done
            updated = true;          
            return updated;
          }
        });
      }

      // if we didn't update the data push to new rows array
      if(!updated) {
        newRows.push(row);
      }
    });

    // check we found new rows 
    if(newRows.length > 0) {
      // add all new rows at once Tim1.getRange(Tim1.getLastRow()+1,2,newRows.length,newRows[0].length).setValues(newRows);
    }
  }
}
0 голосов
/ 29 января 2019

Количество строк, которые вы пытаетесь обновить, кажется неправильным.Это должно быть просто 1, потому что вы пытаетесь обновить одну строку.

Синтаксис: getRange (строка, столбец, numRows, numColumns)

Неправильный диапазон:

 Tim1.getRange(j+1,2,aaa[0].length,aaa[0].length).setValues(aaa); //****Update Duplicate Row

должно быть что-то вроде:

 Tim1.getRange(j+1,2,1,aaa[0].length).setValues(aaa); //****Update Duplicate Row
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...