Условные обновления, основанные на времени, в таблицах Google - PullRequest
0 голосов
/ 13 сентября 2018

Я хотел бы обновить данную дату [день сброса] в еженедельные периоды. Во время этого обновления еженедельная посещаемость также сбрасывается до 0 и если ее значение меньше 2 баллов посещаемости уменьшится на 8 баллов.

Пример начального листа

Name     |  Attendance Point | Weekly Attendance |  Reset Day
--------------------------------------------------------------
Jack     |         12        |         0         |  13/09/2018
Jacob    |         23        |         0         |
Emily    |         12        |         1         | 
Rick     |         11        |         2         | 
Rob      |         21        |         3         |

Требуемое обновление

Name     |  Attendance Point | Weekly Attendance |  Reset Day
--------------------------------------------------------------
Jack     |          4        |         0         |  20/09/2018
Jacob    |         15        |         0         |
Emily    |          4        |         0         | 
Rick     |         11        |         0         | 
Rob      |         21        |         0         |

Пример базового листа

https://docs.google.com/spreadsheets/d/1khPC5r2p0b1srsEGka3fl-GAl6nHACaVR0Cf31cqA1o/edit?usp=sharing

Заранее спасибо

function resetCells() {
var ss = SpreadsheetApp.getActive().getSheetByName('Sheet');
var range = ss.getDataRange().offset(1, 0, ss.getLastRow() - 1);
var values = range.getValues().map(function(e) {
  return e[0] ? [false, e[1], e[2], e[3], e[4] + 1, e[5]] : e;
});
range.setValues(values);
}

Функция обновления

function weekDays() {
var ss = SpreadsheetApp.getActive().getSheetByName('Sheet').getRange('F2').setValue(new Date())

}

1 Ответ

0 голосов
/ 22 сентября 2018

Я решил проблему с этим фрагментом скрипта

function weekDays() {
  var sd = SpreadsheetApp.getActive().getSheetByName('Sheet').getRange('F2').setValue(new Date())
  var ss = SpreadsheetApp.getActive().getSheetByName('Sheet');
  var range = ss.getDataRange().offset(1, 0, ss.getLastRow() - 1);
  var values = range.getValues().map(function(e) {
    if (Number(e[4]) < 2 && Number(e[2] >= 8) ) {
      return e[1] ? [e[0], e[1], Number(e[2]) - 8, e[3], 0, e[5]] : e;
    } else if (Number(e[4]) < 2 && Number(e[2]) < 8) {
      return e[1] ? [e[0], e[1], 0, e[3], 0, e[5]] : e;
    } else {
      return e[1] ? [e[0], e[1], e[2], e[3], 0, e[5]] : e;  
    }
  }); 
  range.setValues(values);
}
...