#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 >