google-apps-script - 当在同一行、不同单元格中选择特定值时,Google 脚本仅在单元格中插入当前日期一次
问题描述
我正在编写一个给我带来麻烦的脚本。G 列具有选项列表值 M1、M2、M3、S1、S2、S3、S4、S5、C1、C2、C3。当从选择列表中选择任何 S 值(S1、S2、S3、S4、S5)时,我希望在 t 列中插入一个时间戳。我希望仅在第一次出现时完成此操作,而不是在 g 列中的选项列表值随后更新或更改时完成。
我很接近,但当前脚本会更新整个 t 列中的日期。
如果可能的话,我还想清理第 9 行。
到目前为止我有这个:
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('ClientList');
var stageValues = s.getRange('g3:g').getValues();
var dateValues = s.getRange('t3:t').getValues();
for (var row in stageValues)
for (var col in stageValues[row])
if (stageValues[row][col] == 'S1' || stageValues[row][col] == 'S2' || stageValues[row][col] == 'S3' || stageValues[row][col] == 'S4' || stageValues[row][col] == 'S5' && dateValues[row][col] == '') {
num = parseInt(row) + 3;
s.getRange('t' + num).setValue(new Date());
}
};
解决方案
你说选择列表值,我假设你的意思是一个下拉列表。但无论如何这都会奏效。每当在 G 列中手动编辑单元格时,onEdit 触发器将检查“S”值和 T 列中的时间戳。如果没有找到时间戳,它将放置一个新的时间戳。“e”是包含有关已编辑单元格信息的触发器对象。
function onEdit(e) {
try {
if( e.range.getSheet().getName() === "ClientList" ) {
if( e.range.getColumn() === 7 ) { // edit in column G
if( e.value.charAt(0) === "S" ) {
if( e.range.offset(0,13,1,1).getValue() === "" ) { // no value in T
e.range.offset(0,13,1,1).setValue(new Date());
}
}
}
}
}
catch(err) {
Logger.log(err);
}
}
推荐阅读
- html - 如何将右下角的作者姓名添加到 HTML 中的引用中
- java - 使用 Google Vision (OCR) 检测 PDF 中的图像和文本
- flutter - Flutter - 选择日期后的文本字段显示日期
- c# - 如何在 azure kubernetes 上运行批处理作业
- regex - 从美国电话号码及其分机号码中删除格式
- javascript - Webpack & Next.js 如何协调异步脚本的执行顺序
- javascript - TypeError:无法读取未定义的属性“名字”,在 ContactComponent.js 中
- python - 如何使用 Python 有效地从 txt 格式文件中去除制表符
- spring-boot - 谷歌课堂 OAuth 集成 Spring Boot
- apache-spark - Spark:无法保存文本文件