Добрый день! У меня есть макрос, он успешно ищет все нужные мне слова в столбце и выделяет одни цветов слова ,и яне пнимаю как проспиать в коде, чтобы каждого слова в итоге выделялось нужным мне отдельным цветом?
let dictionary = {
stop_words: ["Not_Malicious", "NOT_Virus", "NOT_Fake_Message", "NOT_Misleading" , "NOT_Sound" , "NOT_JSalert"],
};
function _1() {
let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// range диапазон поиска
let range = sheet.getRange("E:E").getValues();
range.forEach((item, row) => {
for (let column = 0; column < item.length; column++) {
if (typeof item[column] === "string" && item[column] != "") {
let color = SpreadsheetApp.newTextStyle()
.setForegroundColor("#ea4335")
.build();
let richText = SpreadsheetApp.newRichTextValue().setText(item[column]);
// item[column] текст ячейки
dictionary.stop_words.forEach((word) => {
let arr = searchIndex(
word.toLocaleLowerCase(),
item[column].toLocaleLowerCase()
);
arr.forEach((ind) => {
richText.setTextStyle(ind.startIndex, ind.endIndex, color);
});
sheet
.getRange(row + 1, column + 1)
.setRichTextValue(richText.build());
});
}
}
});
}
function find(i, subStr, str) {
// Алгоритм Кнута-Морриса-Пратта (КМП)
// i-с какого места строки ищем
// j-с какого места образца ищем
for (i; str[i]; ++i) {
for (j = 0; ; ++j) {
if (!subStr[j]) return i; // образец найден
if (str[i + j] != subStr[j]) break;
}
// пока не найден, продолжим внешний цикл
}
// образца нет
return -1;
}
function searchIndex(word, text) {
let res = [];
let startIndex = 0;
while (find(startIndex, word, text) !== -1) {
let poisk = find(startIndex, word, text);
let endIndex = poisk + word.length;
if (res.length === 0) {
res.push({
startIndex: poisk,
endIndex: endIndex,
});
}
if (res[res.length - 1].startIndex !== poisk) {
res.push({
startIndex: poisk,
endIndex: endIndex,
});
}
startIndex++;
}
return res;
}