Ошибка при попытке отфильтровать 2D-массивы и вставить их обратно в Google лист - PullRequest
0 голосов
/ 31 января 2019

Процесс, которого я хочу достичь, состоит в том, чтобы получить данные в двумерный массив, отфильтровать их, затем только захватить данные выбранного столбца в фильтрованном массиве и перенести их обратно на новую вкладку на том же листе Google.Каждый процесс комментируется, поэтому вы можете следить за тем, что я делаю.

function copyToAndFrom() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s1 = ss.getSheetByName("PendingX");//sheet with imported data
  var s2 = ss.getSheetByName("Resolved");//archive sheet
  var lr = s2.getLastRow()+1;//get last row of archive sheet + 1
  var dList = s1.getRange("PendingX!G2:G").getValues(); // Gets all the values of that specific column
  var dLast = dList.filter(String).length; //Gets the length of dList.

  var myArray = []; // A 2D array. I want a 12 column, dLast number of rows array.
  myArray.length = dLast;
  var tempArr = []; // Secondary array to get the filtered data from myArray array.
  var filteredArr = []; // Get only specific data from tempArr array.

  // myArray = s1.getRange('PendingX!D2:O').getValues();
  // The the above comment is the original sheet import with 400+ rows but for testing, Ive disabled it and assigned manually as below.                 
  myArray = [["Pending", , "abc", "def", "ghi", "jkl", "mno", "pqr", "stu", "vwy", "xzz", "aaa"], 
      ["Resolved", , "aabc", "adef", "aghi", "ajkl", "amno", "apqr", "astu", "avwy", "axzz", "aaaa"],
      ["Pending", , "babc", "bdef", "bghi", "bjkl", "bmno", "bpqr", "bstu", "bvwy", "bxzz", "baaa"]];

  var myrowindex, myString, mycolumnindex;
  tempArr[myrowindex] = [];
  for (myrowindex in myArray) {  //Loops through the number of rows in myArray.
    myString = myArray[myrowindex][0];
    if (myString === "Pending") {
      for (mycolumnindex in myArray[myrowindex]) { //Loops through each column of a row in myArray.
        var myColumnValue = myArray[myrowindex][mycolumnindex]; //Loads each component of myArray to a string.
        tempArr[myrowindex].push(myColumnValue); //Push the string into the tempArr array.
      }

      myColumnValue = null;
      myString = null;
    }
  }

  for (myrowindex in tempArr){  //Load data from columns 0,3,10 and 11 into filteredArr array.
    filteredArr.push(tempArr[myrowindex][0]);
    filteredArr.push(tempArr[myrowindex][3]);
    filteredArr.push(tempArr[myrowindex][11]);
    filteredArr.push(tempArr[myrowindex][12]);
  }

  Logger.log(tempArr.length);  // must be less than myArray.length but it is not.
  Logger.log(tempArr[0].length); // must be equal to myArray[0].length but it is not.
  Logger.log(tempArr); //Doesnt store data in a 2D Array but has to.

  //CODE FOR STORING DATA TO SHEET:
  for (var row in filteredArr) { //Loops through the number of rows in filteredArr.
    for (var col in filteredArr[row]) { //Loops through each column of a row in filteredArr.
      var myColumnValue = tempArr[row][col]; //Loads each component of filteredArr to a string.
      final = s2.getRange(2,1,row,col).setValue(myColumnValue); //Push the string into the sheet.
    }
  }
}

Ошибка после недавних изменений:

TypeError: Невозможно вызвать метод "push" из undefined.(строка 30, файл "CopyToFromScript")


ТЕКУЩИЕ ВЫХОДЫ ЖУРНАЛА И ОЖИДАЕМЫЕ ВЫХОДЫ:

Текущий регистратор для tempArr.length:

[19-02-01 19:25:08:933 IST] 22.0

Ожидаемый регистратор для tempArr.length:

[19-02-01 19:25:08:933 IST] 2.0

Текущий регистратор для tempArr[0].length:

[19-02-01 19:25:08:934 IST] 12.0

Ожидаемый регистратор для tempArr[0].length:

[19-02-01 19:25:08:933 IST] 12.0

ТокРегистратор для tempArr:

[19-02-01 19:25:08:935 IST] [Pending, abc, def, ghi, jkl, mno, pqr, stu, vwy, xzz, aaa, Pending, babc, bdef, bghi, bjkl, bmno, bpqr, bstu, bvwy, bxzz, baaa]

Ожидаемый регистратор для tempArr:

[19-02-01 19:25:08:935 IST] [[Pending, abc, def, ghi, jkl, mno, pqr, stu, vwy, xzz, aaa], [Pending, babc, bdef, bghi, bjkl, bmno, bpqr, bstu, bvwy, bxzz, baaa]]

Текущий регистратор для filteredArr:

[19-02-01 19:24:35:773 IST] [P, d, null, null, a, null, null, null, d, null, null, null, g, null, null, null, j, null, null, null, m, null, null, null, p, null, null, null, s, null, null, null, v, null, null, null, x, null, null, null, a, null, null, null, P, d, null, null, b, c, null, null, b, f, null, null, b, i, null, null, b, l, null, null, b, o, null, null, b, r, null, null, b, u, null, null, b, y, null, null, b, z, null, null, b, a, null, null, null, null, null, null]

Ожидаемый регистратор дляfilteredArr:

[19-02-01 19:24:35:773 IST] [[Pending, def, xzz, aaa], [Pending, bdef, bxzz, baaa]]

1 Ответ

0 голосов
/ 01 февраля 2019

Я смог решить проблему.Это было связано с правильным определением 2D-массивов внутри циклов.Я включил фиксированную часть кода для тех, кто хотел бы проверить.

var myrowindex, myString, mycolumnindex, validmyrowindex = 0;
for (myrowindex in myArray) {  
    myString = myArray[myrowindex][0];
    if (myString === "Resolved") {
        tempArr[validmyrowindex] = [];
        for (mycolumnindex = 0; mycolumnindex < 12; mycolumnindex++){
            if(tempArr[validmyrowindex] != undefined) {
                var myColumnValue = myArray[myrowindex][mycolumnindex];
                tempArr[validmyrowindex][mycolumnindex] = myColumnValue;
            } else {
                var myColumnValue = myArray[myrowindex][mycolumnindex];
                tempArr[validmyrowindex] = myColumnValue;
            }     
        myColumnValue = null;
        myString = null;
        }
    } else {validmyrowindex--}
        validmyrowindex++
}

Все, что ниже этого пункта из исходного кода, является избыточным.Это было заменено итерацией вышеупомянутого с фиксированными столбцами.А основная функция setValues(array) использовалась для хранения всего массива на листе.Спасибо всем за ваше ценное объяснение и поддержку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...