Скрипт приложения Google sheet : Переименуйте каждый лист, если он соответствует критериям

#datetime #google-apps-script #google-sheets

Вопрос:

Привет, я использую этот скрипт для переименования каждого листа, вставляя «Копию» перед именем существующего листа, где текст в ячейке » B36 » = «АНАЛИЗ БЕЗОПАСНОСТИ», а дата в ячейке » K3 » старше 30 дней. Моя проблема связана с датой, я не могу понять, как это сделать. Ячейка «K3» ячейки находятся в этом формате «1 августа 2021 года», Я думаю, мне нужно преобразовать дату в » K3 » в числовой формат. Любая помощь будет очень признательна

 function getSheet() {
    var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
    var sum = 0;
    for (var i = 0; i < sheets.length ; i   ) {
        var sheet = sheets[i];
        var date = new Date();
        var ageInDays = 30;
        var threshold = new Date(
                      date.getFullYear(),
                      date.getMonth(),
                      date.getDate() - ageInDays)
                    .getTime();

        var val = sheet.getRange('K3').getValue();
        var val2 = sheet.getRange('B36').getValue();
       
       


        if (val >= threshold amp;amp; val2 == 'SAFETY ANALYSIS') {
            var sheetName = sheet.getName()
            sheet.setName('Copy Of ' sheetName)  
        }       
    }

  
}
 

Комментарии:

1. Является ли ячейка, содержащая дату, отформатированной как дата, или она отформатирована как текстовая или обычная?

2. когда я запускаю отладчик, он выдает в этом формате значение для val (‘K3’) Вс 01 августа 2021 00:00:00 GMT-0600 (летнее время в горах)

3. Он уже возвращает a date . var val = sheet.getRange('K3').getValue().getTime()

Ответ №1:

Возможно, вы захотите обернуть значение, полученное из ячейки K3 , в Date() конструктор. Это должно работать с датами электронных таблиц, а также с текстовыми строками, которые выглядят как даты.

Я думаю, что у вас val >= threshold неправильное сравнение. Попробуйте что-нибудь вроде этого:

 function renameOldSafetyAnalysisSheets() {
  const timeLimit = 30 * 24 * 60 * 60 * 1000; // 30 days
  const now = new Date();
  const sheets = SpreadsheetApp.getActive().getSheets();
  sheets.forEach(sheet => {
    if (sheet.getRange('K3').getValue() !== 'SAFETY ANALYSIS') {
      return;
    }
    const date = new Date(sheet.getRange('B36').getValue());
    if (!date.getTime()
      || now.getTime() - date.getTime() < timeLimit) {
      return;
    }
    try {
      sheet.setName('Copy of '   sheet.getName());
    } catch (error) {
      ;
    }
  });
}
 

Ответ №2:

 function getSheet() {
  const shts = SpreadsheetApp.getActive().getSheets();
  let d = new Date();
  let ageInDays = 30;
  let threshold = new Date(d.getFullYear(),d.getMonth(),d.getDate() - ageInDays).valueOf();
  shts.forEach(sh => {
    let val = new Date(sh.getRange('K3').getValue()).valueOf();
    let val2 = sh.getRange('B36').getValue();
    if (val <= threshold amp;amp; val2 == 'SAFETY ANALYSIS') {
      sh.setName('Copy Of '   sh.getName())
    }
  });
}
 

Комментарии:

1. Спасибо всем за вашу помощь, я только что попробовал ответ Купера, и он работает хорошо, единственное, что мне пришлось изменить, — это порог val >= на val >