Автоматически удалять строки с датой -30 дней с помощью функции onOpen () - PullRequest
0 голосов
/ 23 января 2020

У меня есть общий лист с несколькими удаленными пользователями, этот лист является листом для записи до даты выпуска продуктов.

У меня около 50 записей в день, которые go 'устарели 'но хотел бы сохранить записи за месяцы.

Кто-нибудь знает сценарий, который удалял бы любые строки с датой в столбце C на сегодня -30, который работает с функцией onOpen?

Я нашел несколько, которые работают, но мне нужен один, который работает на Open.

1 Ответ

0 голосов
/ 23 января 2020

Это должно работать, если пользователи имеют доступ к электронной таблице Edit и если скрипт связан с электронной таблицей:

function onOpen(e) {
  var now = new Date();
  var ss = e.source;
  var sheet = ss.getSheetByName("Sheet1");
  var firstRow = 2;
  var firstCol = 1;
  var numRows = sheet.getLastRow() - firstRow + 1;
  var numCols = sheet.getLastColumn();
  var values = sheet.getRange(firstRow, firstCol, numRows, numCols).getValues();
  var daysToMilliseconds = 1000 * 3600 * 24;
  for (var i = numRows - 1; i >= 0; i--) {
    var cellTime = new Date(values[i][2]).getTime();
    var nowTime = now.getTime();
    if ((nowTime - cellTime) / daysToMilliseconds > 30) {
      sheet.deleteRow(i + firstRow);
    }
  }
}

Если речь идет об автономном скрипте, о котором мы говорим, вам следует установить onOpen триггер, вручную или программно. Например, если это было программно, вы могли бы установить триггер, запустив эту функцию:

function createOnOpenTrigger() {
  var ss = SpreadsheetApp.openById("your-spreadsheet-id");
  ScriptApp.newTrigger("deleteOnOpen")
  .forSpreadsheet(ss)
  .onOpen()
  .create(); 
}

И затем вам пришлось бы переименовать вашу функцию в deleteOnOpen.

Ссылка:

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...