Я работаю в компании по управлению запасами, и мне нужно отсортировать данные 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 ----------------------------------------------------------------------------------