function COUNTUNIQWORDS(range) {
let wordsCount = {};
range.forEach(row=>{
row.forEach(cell=>{
let text = String(cell)
.toLowerCase()
.replace(/[^а-яА-ЯёЁa-zA-Z ]+/gi, ' ')
.replace(/\s+/gi, ' ');
let words = text
.split(' ')
.filter(word=>word!=='');
words.forEach(word=>{
if (wordsCount[word]){
wordsCount[word]+=1;
}else{
wordsCount[word]=1;
};
});
});
});
let result = Object.keys(wordsCount)
.sort()
.map(word=>[word, wordsCount[word]]);
return result;
};
=unique(столбец_с_ключами)
=filter(столбец_с_характеристикой;столбец_с_ключами=текущий_ключ)
=join("
";unique(filter(столбец_с_характеристикой;столбец_с_ключами=текущий_ключ)))
const logger = {
log:(val)=>{
SpreadsheetApp.openById(``) // тут ID таблицы
.getSheetByName(`log`) // тут имя листа куда сыпятся логи
.appendRow([new Date(), `${val}`]);
}
};
// Использовать так же, только с маленькой буквы
logger.log(`что-то важное`);
function _onEdit(e) {
let sheet = e.source.getActiveSheet();
let address = e.range.getA1Notation().toUpperCase();
var row = e.range.getRow();
let col = e.range.getColumn();
let newValue = e.value;
let oldValue = e.oldValue;
if ((-1 != whiteListSheetNames.indexOf(sheet.getName())) && (-1 != whiteListRangeNames.indexOf(address))) {
// Что-то делаем
};
};
statistic = statistic.map(x=>{
return [x.phone || "",
(x.finishedAt != null) ? new Date(x.finishedAt).toLocaleString("ru-RU", {timeZone: "Europe/Moscow"}) : "",
x.attemptsCount || "",
x.tagName || "",
x.jobStatus || "",
x.callDuration || "",
x.callJobId || "",
x.town || "",
x.fio || ""
];
})
SpreadsheetApp
.getActiveSpreadsheet()
.getSheetByName("Лист1") // Имя листа вывода
.getRange(1,1, statistic.length, statistic[0].length) // 1,1 - строка и столбец ячейки вывода
.setValues(statistic);
function arraysDiff(arr1, arr2) {
arr1 = [arr1].flat(Infinity);
arr2 = [arr2].flat(Infinity);
arr1 = arr1.filter(el=>-1===arr2.indexOf(el));
.map(el=>[el]);
return arr1;
}
=query(данные;"SELECT * WHERE B <> "&JOIN(" AND B <> ";список_исключений))