- Вы хотите, чтобы даты столбца "C" и столбца "D" соответствовали датам "L1: NL1" в качестве диапазона.
- Вы хотите указать значение столбца "E "к первой ячейке соответствующего диапазона.
- Вы хотите изменить цвет фона соответствующего диапазона на
#b7e1cd
.
Если мое понимание вашего вопроса вернокак насчет этой модификации?Из вашего вопроса я понял, что оба сценария «Очистить текущие данные перед обработкой и записью» и «Сортировать данные по региону и дате начала» работают нормально.Так что я модифицировал про "3-ю часть"Я думаю, что есть несколько решений для вашей ситуации.Поэтому, пожалуйста, подумайте об этом как об одном из них.
Поток:
Поток этой модификации выглядит следующим образом.
- Получите значения "C3: E".
- Получить даты "L1: NL1".
- Сравните каждую строку значений "C3: E" с датами "L1: NL1" и создайте массив для использования привывод.
- Создайте 2 новых массива для помещения в ячейки "L3: NL".Они используются для значений и цветов фона.
- Поместите значения в 2 новых массива, используя массив, созданный в разделе 3.
- Поместите значения и установите цвета фона.
Модифицированный скрипт:
Пожалуйста, измените ваш скрипт следующим образом.
С:
var lastRow = sheet.getMaxRows()
var lastCol = sheet.getMaxColumns()
for (var i=3; i<lastRow; i++) {
var meetingSubject = sheet.getRange(i,5).getValue();
var startDay = sheet.getRange(i,3).getValue();
Logger.log(startDay)
var day = sheet.getRange(1,12,1,lastCol).getValues()[0];
if(startDay = day){
sheet.getRange(i,12).setValue(meetingSubject);
}
Кому:
var values = sheet.getRange("C3:E").getValues().filter(function(e) {return e.some(function(f){return f})}).map(function(e) {return [e[0].getTime(), e[1].getTime(), e[2]]});
var dates = sheet.getRange("L1:NL1").getValues()[0].map(function(e) {return e.getTime()});
var res = values.reduce(function(ar1, e, i) {
var r = dates.reduce(function(ar2, f, j) {
if (f == e[0]) ar2.push([e[2], i, j]);
if (f == e[1]) ar2.push(j);
return ar2;
}, []);
if (r.length == 2) ar1.push(Array.prototype.concat.apply([], r));
return ar1;
}, []);
var row = values.length;
var col = dates.length;
var values = Array.apply(null, Array(row)).map(function() {return Array.apply(null, Array(col)).map(function() {return ""})});
var colors = Array.apply(null, Array(row)).map(function() {return Array.apply(null, Array(col)).map(function() {return ""})});
res.forEach(function(e) {
values[e[1]][e[2]] = e[0];
for (var i = e[2]; i <= e[3]; i++) {
colors[e[1]][i] = "#b7e1cd";
}
});
sheet.getRange("L3:NL" + (row + 2)).setValues(values).setBackgrounds(colors);
Примечание:
- Если вы неЧтобы изменить цвет фона, удалите
.setBackgrounds(colors)
из sheet.getRange("L3:NL" + (row + 2)).setValues(values).setBackgrounds(colors)
.
Ссылки:
Если я неправильно понимаю ваш вопрос, скажи пожалуйста.Я хотел бы изменить его.
Добавлено:
Если вы хотите использовать образец электронной таблицы, включая внутренние заголовки, измените ее следующим образом.
From:
var values = sheet.getRange("C3:E").getValues().filter(function(e) {return e.some(function(f){return f})}).map(function(e) {return [e[0].getTime(), e[1].getTime(), e[2]]});
var dates = sheet.getRange("L1:NL1").getValues()[0].map(function(e) {return e.getTime()});
var res = values.reduce(function(ar1, e, i) {
var r = dates.reduce(function(ar2, f, j) {
if (f == e[0]) ar2.push([e[2], i, j]);
if (f == e[1]) ar2.push(j);
Кому:
var values = sheet.getRange("A3:E").getValues().filter(function(e) {return e.some(function(f){return f})}).map(function(e) {return [e[0], e[2].getTime(), e[3].getTime(), e[4]]});
var dates = sheet.getRange("L1:NL1").getValues()[0].map(function(e) {return e.getTime()});
var res = values.reduce(function(ar1, e, i) {
var r = dates.reduce(function(ar2, f, j) {
if (e[0] && f == e[1]) ar2.push([e[3], i, j]);
if (e[0] && f == e[2]) ar2.push(j);