У меня есть расписание в Google Sheets, для которого необходимо изменить границы в зависимости от того, встречается ли класс в это время.
Он должен быть запущен onEdit, чтобы при изменении электронной таблицы границы обновлялись. Мне нужно будет удалить границы в начале каждого триггера, и у меня есть этот код из другого ответа на вопрос:
function RemoveBorders() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var cell = sheet.getRange("C5:G29");
cell.setBorder(false, false, false, false, false, false, "black", SpreadsheetApp.BorderStyle.solid);
}
Пример этого можно найти на эта ссылка Мне нужно каждый класс, в который нужно поместить коробку (и любые ячейки, не включенные в класс, должны сохранять свои границы.
Условное форматирование фона было выполнено с использованием этой формулы, и оно работает очень хорошо.
=SUMPRODUCT(($B5>=($L$5:$L)),(C$4=($K$5:$K)),($B5<($M$5:$M)))>=1
У меня есть код, который работает для редактирования границ в Excel с помощью условного форматирования. Но так как я новичок в сценариях Google и Java, это действительно ошеломляет, как преобразовать концепцию
У меня есть три условных правила
Правило 1: Для первой ячейки класса добавьте границы слева, справа и сверху ячейки, , если ячейка находится в расписании столбец, который имеет класс в этот день И если период ячейки равен значению в столбце Время начала
=SUMPRODUCT((C$4=($K$5:$K)),($B5=($L$5:$L)))>=1
Правило 2: для "средних ячеек" класс, добавить борде rs слева и справа: , если ячейка находится в столбце расписания, который имеет класс в этот день И если период ячейки (9: 00-9: 30) больше или равен классу Начальные значения времени И период времени ячейки меньше значений времени окончания класса.
=SUMPRODUCT((C$4=($K$5:$K)),($B5>=($L$5:$L)),($B5<($M$5:$M)))>=1
Правило 3: Добавьте границу вверху ячейки (для ячеек сразу после конец класса) если ячейка находится в столбце расписания, у которого есть класс в этот день, И если период ячейки находится в столбцах времени окончания класса.
=SUMPRODUCT((C$4=($K$5:$K)),($B5=($M$5:$M)))>=1
Это мой последний шаг в завершении импорта и манипуляции с данными динамического c, который динамически обновляет расписание отдельного учителя. Я искал и искал и искал столько всего, но я все время зацикливаюсь на том, как добиться этого в форме сценария. Любая помощь будет очень признательна.
РЕДАКТИРОВАТЬ: Как полный новичок ie для всего этого, я просто пытался заставить вещи работать. В процессе я наткнулся на несколько других ответов на вопросы и собрал воедино этот код, который хотя бы немного очерчивает классы, хотя и не является идеальным решением
function onEdit() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("C5:g30");
var adress= range.getA1Notation();
Logger.log("changed cell %s", adress);
sheet.getRange('F2').setValue(adress);
// Remove all borders
var range = sheet.getRange("c5:g30");
range.setBorder(true, true, true, true, true, true,"#D3D3D3",SpreadsheetApp.BorderStyle.SOLID);
//addtop rows
var numRows = range.getNumRows();
var numCols = range.getNumColumns();
for (var i = 1; i <= numRows; i++) {
for (var j = 1; j <= numCols; j++) {
var currentValue = range.getCell(i,j).getValue();
Logger.log("changed cell %s", range.getCell(i,j).getA1Notation() );
if(currentValue != "") {
Logger.log("positive on %s", range.getCell(i,j).getA1Notation());
range.getCell(i,j).setBorder(true, null, null, null, null, null, "black", SpreadsheetApp.BorderStyle.SOLID_MEDIUM);
}
}
}
}