javascript - 关于 Google 表格的最后修改日期,此 Google 脚本代码有什么问题?
问题描述
我是一个完整的初学者,只是试图制作一个我的家人可以用来进行预算的界面。我唯一苦苦挣扎的是某些单元格的最后修改日期的自动化。每当我将代码作为附加组件运行时,即使我将代码输入到第 10、11、15 列等中,它也只会按照第一条语句中的指定修改第 7 列。似乎忽略了其他“else if”语句。
function onEdit(e) {
var row = e.range.getRow();
var col = e.range.getColumn();
if(col === 5,6 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
e.source.getActiveSheet().getRange(row,7).setValue(new Date());
}
else if(col === 10,11 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
e.source.getActiveSheet().getRange(row,12).setValue(new Date());
}
else if(col === 15,16 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
e.source.getActiveSheet().getRange(row,17).setValue(new Date());
}
else if(col === 20,21 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
e.source.getActiveSheet().getRange(row,22).setValue(new Date());
}
else if(col === 25,26 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
e.source.getActiveSheet().getRange(row,27).setValue(new Date());
}
else if(col === 30,31 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
e.source.getActiveSheet().getRange(row,32).setValue(new Date());
}
else if(col === 35,36 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
e.source.getActiveSheet().getRange(row,37).setValue(new Date());
}
else if(col === 40,41 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
e.source.getActiveSheet().getRange(row,42).setValue(new Date());
}
else if(col === 45,46 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
e.source.getActiveSheet().getRange(row,47).setValue(new Date());
}
else if(col === 50,51 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
e.source.getActiveSheet().getRange(row,52).setValue(new Date());
}
else if(col === 55,56 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
e.source.getActiveSheet().getRange(row,57).setValue(new Date());
}
else if(col === 60,61 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
e.source.getActiveSheet().getRange(row,62).setValue(new Date());
}
}
解决方案
if ( col === 5,6 ) {
...
}
相当于
if ( 6 ) {
...
}
if 语句总是为真,因为6
它是一个真值
var col = 1; // Let's take 1 for example
if ( col === 5,6 ) {
console.log( 'Matches first if condition' );
}
if ( 6 ) {
console.log( 'Matches second if condition' );
}
if ( col === 5 ) {
console.log( 'Matches third if condition' );
}
要检查给定的数字是否在数字列表中,您可以:
- 分别比较
if ( ( col === 5 || col === 6 ) && /* the rest of your logic here */ ) {
...
}
- 将数字放入
Array
并找到匹配的数字,indexOf
以便您将来可以轻松添加更多想要匹配的列号
if ( [ 5, 6 ].indexOf( col ) !== -1 && /* the rest of your logic here */ ) {
...
}
此外,您不必row > 3 && e.source.getActiveSheet().getName() === "2021"
在每个if
语句中都进行检查。检查一次并继续检查匹配的列
var row = e.range.getRow();
var col = e.range.getColumn();
var activeSheet = e.source.getActiveSheet();
var currentDate = new Date();
if ( row > 3 && e.source.getActiveSheet().getName() === "2021" ) {
if ( col === 5 || col === 6 ) {
activeSheet.getRange( row, 7 ).setValue( currentDate );
}
if ( col === 10 || col === 11 ) {
activeSheet.getRange( row, 12 ).setValue( currentDate );
}
...
}
推荐阅读
- r - 如何防止专有的 R 包被同名的 CRAN 包更新和替换?
- python - MySQL Python 连接器失败
- android - Android 录像机应用程序 - “视频无法播放”错误
- mysql - 在 mariaDB 中使用 BLOB 与 TEXT(检索和插入速度)有什么区别
- java - Reactor:检测空信号以对空单声道起作用
- authentication - 如何使用他的密钥在本地 gitlab 中找到用户
- javascript - 如何在 IE 11 中将变量从一个浏览器窗口传递到另一个浏览器窗口(同一浏览器)?
- ruby-on-rails - Webpacker/Typescript 无法解析 Rails 资产管道文件
- powershell - 将已安装的 Windows 更新与定义的阵列进行比较
- react-native - 无法导航到另一个屏幕反应原生