Стратегия:
- FIFO: первый пришел, первый вышел
- Перебрать все строки, используя
forEach
- Если кредит присутствует, повторите цикл по всем строкам, используя
some
для поиска квитанций
- Если кредит
e[2]
в первом цикле равен поступлениям f[3]
во втором цикле, проверьте идентификатор [0]
- Если ID равен, соединить два пустых столбца в конце, иначе на 2-й позиции, чтобы создать равномерный массив из 6 столбцов
- Установить этот массив обратно на лист.
Пример сценария:
function transactionSegregator() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ppto = ss.getSheetByName('Ppto.');
var data = ppto.getRange('B5:E12').getValues();
data.forEach(function(e) {
//e: Each row
if (e[2] && e.length == 4) {
//e[2]:credits; If this row is not spliced
data.some(function(f) {
//f:Each row; Second loop
if (e[2] == f[3]) {
//if credits = debit
if (e[0] == f[0]) {
//if id = id, splice two empty columns after Col4, else after Col2
e.splice(4, 0, '', '');
f.splice(4, 0, '', '');
} else {
e.splice(2, 0, '', '');
f.splice(2, 0, '', '');
}
return true;
}
});
}
});
Logger.log(data);
ppto.getRange(5, 6, data.length, data[0].length).setValues(data);// F5
}
Ссылки: