datetime - Google sheet + App Script:如果符合条件,则重命名每个工作表
问题描述
嗨,我正在使用此脚本通过在现有工作表名称前面插入“副本”来重命名每张工作表,其中单元格“B36”=“安全分析”中的文本和“K3”单元格中的日期早于 30 天. 我的问题与日期有关,我不知道该怎么做。单元格“K3”单元格的格式为“2021 年 8 月 1 日”我想我需要将“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 && val2 == 'SAFETY ANALYSIS') {
var sheetName = sheet.getName()
sheet.setName('Copy Of '+sheetName)
}
}
}
解决方案
您可能希望将从单元格中获得的值包装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) {
;
}
});
}
推荐阅读
- rust - 使用 path["../xxx.rs"] 导入模块怎么样?
- java - 在java中哪里可以找到“load_der_public_key”的相同实现
- multithreading - 用协程替换具有状态变量的线程
- python - python > 请求模块 > 发布 > 标头不起作用
- arduino - 显示 SSD1306 在 esp32 上一段时间后停止工作
- google-app-engine - 为什么谷歌应用引擎似乎使用旧代码?
- pine-script - 为什么实时交易中的策略只提示一次?
- java - Springboot启动时的线程,无法读取属性文件
- salesforce - Conga CLM 和 X-Author 模板认证考试?
- javascript - 执行时发生异常:android.os.ParcelableException:java.io.IOException:仅请求内部,但空间不足