Сценарии Google Apps: как вставить элемент из массива в многомерный массив? - PullRequest
0 голосов
/ 09 февраля 2020

Я работаю в компании по управлению запасами, и мне нужно отсортировать данные Google Sheets, которые я извлекаю из отчетов клиентов. В настоящее время я вручную сортирую данные, следуя тем же шагам каждый раз. Я пытаюсь автоматизировать процесс с помощью Google Apps Script. В этом примере данные электронной таблицы представляют собой отчет о наличии на складе. Отчет имеет 6 столбцов каждый раз, но разные строки данных. Как показано в примере ниже.

+--------+---------------------------+-------------+------------+---------+--------------+
| Bin No |         Item Name         |   Station   | Item Size  | On-Hand | On-Hand(UOM) |
+--------+---------------------------+-------------+------------+---------+--------------+
|   8331 | 5 Seed Low Sugar          | First Level | 345 ml     |       8 | BOTTLE       |
|   8331 | 5 Seed Low Sugar          | First Level | 6 x 345 ml |       1 | CASE         |
|   7530 | Abel's Tempest Chardonnay | First Level | 750 ml     |       5 | BOTTLE       |
+--------+---------------------------+-------------+------------+---------+--------------+

Я сортирую весь набор данных по строкам с текстом «CASE» в 6-м столбце (On-Hand (UOM)) в массив «caseCounts» и строки, которые не в массив "sglCounts". Теперь это мои 2 массива, которые я могу использовать для получения моего окончательного отчета о количестве файлов.

Мне нужно выделить размер "CASE" из 4-го столбца (Item Size) в массиве "caseCounts". Поэтому я удаляю 4-й столбец и использую его для создания нового массива с именем caseSizeOnly, который содержит все размеры кейсов. В приведенном выше примере это 6 & отбросить «x 345 мл».

Мне нужно затем объединить массив «caseSizeOnly» с массивом «caseCounts». Вот где я столкнулся с трудностями.

Мои попытки пока:

// --------------------------------- Sort Counts  to CountFile sheet  ----------------------------------------------------------------------------------


function countFile() {

  var app = SpreadsheetApp;
  var ss = app.getActive();
  var ws = ss.getSheetByName("report");
  var onHand = ws.getRange(5, 1, ws.getLastRow(),6).getValues();

  var caseCounts = []; // This array contains only the items counted as CASEs
  var sglCounts = []; // This array contains all the other counts




  // Sorting the intiial data into Case counts & Single bottle counts
  onHand.map(function(r){
    var d = r[5]
    if(d.toString().indexOf("CASE") === -1){
     sglCounts.push(r);
    } else {
      caseCounts.push(r);
    }
  });


  var arr3 = removeEl(caseCounts, 3);// new array without column "Pack Size"

  var arr4 = caseCounts.map(splitCol); // returns ONLY the case size out of the "Pack Size" column which must be added back to arr3


// attemting to combine the 2 arrays & failing miserably! this is about the 100th version of my attempts
         for(var i = 0; i < arr4.length; i++) {
          arr3.push(arr4[i]);
            }

      Logger.log(arr3);

     }

   /*                // --------------------------------- Adding case size to caseCount array NOT WORKING!!!!!!!!  ----------------------------------------------------------------------------------




       */                 

                    // -------------------------------  Function to Split out column Pack Size ---------------------------------------------------------------------------------- 

                        function splitCol(row){

                            var caseSize = row[3].split(" x");
                            var caseOnly = caseSize.slice(0,1);

                       //   Logger.log(caseOnly);

                           return caseOnly;

                        }


                   // -------------------------------  Function to remove column Pack Size ---------------------------------------------------------------------------------- 

                        function removeEl(array, remIdx) {
                        return array.map(function(arr) {
                        return arr.filter(function(el,idx){return idx !== remIdx});  
                        });
                        };

                   // -------------------------------  END Function to remove column Pack Size ----------------------------------------------------------------------------------


1 Ответ

1 голос
/ 09 февраля 2020

Если я правильно понял, когда создается arr3, это выглядит так:

[[8331.0, 5 Seed Low Sugar, First Level, 1.0, CASE]]

А затем вы хотите взять количество бутылок в футляре (в этом примере 6), и умножьте его на количество ящиков (в этом примере 1), чтобы получить общее количество бутылок. Что-то вроде:

[[8331.0, 5 Seed Low Sugar, First Level, 6.0, CASE]]

Если это то, что вам нужно, вам нужно сделать это:

  for (var i = 0; i < arr4.length; i++) {
    arr3[i][3] *= arr4[i];
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...