Повторяющаяся формула цикла
Я хочу добавить в свой сценарий повторяющуюся формулу для расписания, в которой, когда я выбиваю, она будет рассчитывать продолжительность времени входа и выхода, а затем блокировать значения времени входа и выхода и общую продолжительность. Заранее спасибо, если вы мне поможете.
function setValue(cellName, value) {
SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).setValue(value);
}
function getValue(cellName) {
return SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).getValue();
}
function getNextRow() {
return SpreadsheetApp.getActiveSpreadsheet().getLastRow() + 1;
}
function getNextRow2() {
return SpreadsheetApp.getActiveSpreadsheet().getLastRow() + 2;
}
function setUser1(x) {
setValue('I1', 'User 1');
}
function setUser2() {
setValue('I1', 'User 2');
}
function addRecord(a, b, c) {
var row = getNextRow();
setValue('A' + row, a);
setValue('B' + row, b);
setValue('C' + row, c);
}
function isUserIn(user) {
var lastRow = SpreadsheetApp.getActiveSheet().getLastRow();
for (var i = lastRow; i >= 1; i--) {
if (getValue("A" + i) == user) {
if (getValue("C" + i) > getValue("B" + i)) {
return false;
}
return true;
}
}
}
function punchIN() {
var user = getValue("I1");
var lastRow = SpreadsheetApp.getActiveSheet().getLastRow();
addRecord(getValue('I1'), new Date());
}
function punchOut() {
var user = getValue("I1");
var lastRow = SpreadsheetApp.getActiveSheet().getLastRow();
if (isUserIn(user)) {
for (var i = lastRow; i >= 1; i--) {
if (getValue("A" + i) == user) {
if (getValue("C" + i) == "") {
setValue("C" + i, new Date(), "IN");
}
}
}
}
}
в основном это должно выглядеть так, введите здесь описание изображения
Пожалуйста, помогите мне сделать это, спасибо. На самом деле у меня нет опыта в кодировании, было бы очень полезно, если бы кто-нибудь помог мне с этим.
1 ответ
Измените функцию Punchout() следующим образом:
function punchOut() {
var user = getValue("I1");
var lastRow = SpreadsheetApp.getActiveSheet().getLastRow();
if (isUserIn(user)) {
for (var i = lastRow; i >= 1; i--) {
if (getValue("A" + i) == user) {
if (getValue("C" + i) == "") {
setValue("C" + i, new Date());
var duration = (getValue("C" + i) - getValue("B" + i)) / (60 * 60 * 1000);
setValue("D" + i, duration);
SpreadsheetApp.getActiveSheet().getRange("B" + i + ":C" + i).setLocked(true);
break;
}
}
}
}
}
Также вы можете изменить свой getNextRow следующим образом:
function getNextNRow(n) {
return SpreadsheetApp.getActiveSpreadsheet().getLastRow() + n;
}