Мне нужна помощь, разбивая массив - PullRequest
0 голосов
/ 07 июня 2018

Мне трудно редактировать этот скрипт.Он просматривает одну вкладку, вытягивает все строки, которые соответствуют критериям, и вставляет их в другую вкладку.Сценарий ниже работает, но не совсем соответствует моим потребностям.Он вставляет всю строку, мне нужны только столбцы A, B и C. В идеале, мне нужно скопировать данные в столбцы A, D и E соответственно.Спасибо за любую помощь!

    function Migrate2() {

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName('OnBoard');
    var targetSheet = ss.getSheetByName('NewHire');
    var val = sheet.getRange('a3:l').getValues();
    var headers = val.shift();
    var arr = [],
        rowsToWriteBack = [];

    rowsToWriteBack.push(headers);
    val.forEach(function (r, i) {
        r[7] == 'COMPLETE'&& r[11] == 'N' ? arr.push(r) : rowsToWriteBack.push(r)});

    if (arr.length > 0) {
        targetSheet.getRange(targetSheet.getLastRow() + 1, 1, arr.length, arr[0].length).setValues(arr);

    }
   }

1 Ответ

0 голосов
/ 07 июня 2018

Попробуйте это

function Migrate2() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName('OnBoard');
    var targetSheet = ss.getSheetByName('NewHire');
    var val = sheet.getRange('a3:l').getValues();
    var headers = val.shift();
    var arr = [],
    rowsToWriteBack = [];

    rowsToWriteBack.push(headers);

    val.forEach(function (r, i) {
            r[7] == 'COMPLETE'&& r[11] == 'N' ? 
                arr.push([r[0],r[1],r[2]]) : 
                rowsToWriteBack.push([r[0],r[1],r[2]])
    });

        if (arr.length > 0) {
                            for(var i = 0; i < arr.length; i++) {
                                targetSheet.getRange(targetSheet.getLastRow() + i + 1, 1, 1, 1).setValues(arr[i][0]);
                                targetSheet.getRange(targetSheet.getLastRow() + i + 1, 4, 1, 1).setValues(arr[i][1]);
                                targetSheet.getRange(targetSheet.getLastRow() + i + 1, 5, 1, 1).setValues(arr[i][2]);
                            }
        }
    }
}

Трудно протестировать без доступа к среде, в которой вы работаете, но я думаю, что вышеприведенное должно работать.Удачи!

Вот обновленная версия, которая (надеюсь) устраняет ошеломляющую проблему:

function Migrate2() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName('OnBoard');
    var targetSheet = ss.getSheetByName('NewHire');
    var val = sheet.getRange('a3:l').getValues();
    var headers = val.shift();
    var arr = [],
    rowsToWriteBack = [];

    rowsToWriteBack.push(headers);

    val.forEach(function (r, i) {
            r[7] == 'COMPLETE'&& r[11] == 'N' ? 
            arr.push([r[0],r[1],r[2]]) : 
            rowsToWriteBack.push([r[0],r[1],r[2]])
    });

        if (arr.length > 0) {
            for(var i = 0; i < arr.length; i++) {
                var addToRow = targetSheet.getLastRow() + i + 1;

                targetSheet.getRange(addToRow, 1, 1, 1).setValues(arr[i][0]);
                targetSheet.getRange(addToRow, 4, 1, 1).setValues(arr[i][1]);
                targetSheet.getRange(addToRow, 5, 1, 1).setValues(arr[i][2]);
            }
        }
    }
}

попытка № 3 для предотвращения пропуска строк

    function Migrate2() {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var sheet = ss.getSheetByName('OnBoard');
        var targetSheet = ss.getSheetByName('NewHire');
            var startingRow = targetSheet.getLastRow() + 1;
        var val = sheet.getRange('a3:l').getValues();
        var headers = val.shift();
        var arr = [],
        rowsToWriteBack = [];

        rowsToWriteBack.push(headers);

        val.forEach(function (r, i) {
                r[7] == 'COMPLETE'&& r[11] == 'N' ? 
                arr.push([r[0],r[1],r[2]]) : 
                rowsToWriteBack.push([r[0],r[1],r[2]])
        });

            if (arr.length > 0) {
                for(var i = 0; i < arr.length; i++) {
                    var addToRow = startingRow + i;

                    targetSheet.getRange(addToRow, 1, 1, 1).setValues(arr[i][0]);
                    targetSheet.getRange(addToRow, 4, 1, 1).setValues(arr[i][1]);
                    targetSheet.getRange(addToRow, 5, 1, 1).setValues(arr[i][2]);
                }
            }
        }
    }
...