我正在设置一个工作表,根据任务的进度,一个人将能够在不同的时间选中一个复选框。因此,对于许多不同的任务,每行有5个复选框。
现在,我们的想法是,当你检查其中一个复选框时,在接下来的几个单元格中会出现一条消息。因此,消息构建在3个单元格中。第一个单元格只是文本,第二个单元格是日期,第三个单元格是时间。此外,这些单元格每个有5个段落(每个复选框一个)。
当我试图使时间戳停留在输入时的时候,问题就出现了。就像现在一样,每次我更新Google页面的任何部分时,时间都会发生变化。
我把我的公式设置如下:
关于短信:
=IF($C4=TRUE,"Insert text 1 here","")&CHAR(10)&IF($E4=TRUE, "Insert text here","")&CHAR(10)&IF($G4=TRUE, "Insert text 3 here","")&CHAR(10)&IF($I4=TRUE, "Insert text 4 here,"")&CHAR(10)&IF($K4=TRUE, "Insert text 5 here","")
日期:
=IF($C4=TRUE,(TEXT(NOW(),"mmm dd yyyy")),"")&CHAR(10)&IF($E4=TRUE,(TEXT(NOW(),"mmm dd yyyy")),"")&CHAR(10)&IF($G4=TRUE,(TEXT(NOW(),"mmm dd yyyy")),"")&CHAR(10)&IF($I4=TRUE,(TEXT(NOW(),"mmm dd yyyy")),"")&CHAR(10)&IF($K4=TRUE,(TEXT(NOW(),"mmm dd yyyy")),"")
就目前而言:
=IF($C4=TRUE,(TEXT(NOW(),"HH:mm")),"")&CHAR(10)&IF($E4=TRUE,(TEXT(NOW(),"HH:mm")),"")&CHAR(10)&IF($G4=TRUE,(TEXT(NOW(),"HH:mm")),"")&CHAR(10)&IF($I4=TRUE,(TEXT(NOW(),"HH:mm")),"")&CHAR(10)&IF($K4=TRUE,(TEXT(NOW(),"HH:mm")),"")
一切看起来都是这样的:
如果有人能帮我把这件事做好,以便在选中这些框后插入日期和时间,这样它们就不会再次改变,我将不胜感激。
发布于 2022-11-11 00:42:20
请注意,您的斗争与不断变化的日期时间。在过去的一年里,我和你一样挣扎,我找到了一个很好的解决方案。但是它需要用应用程序脚本做一些“肮脏的工作”。
我的案例中的一些背景:
function timestamp() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const totalSheet = ss.getSheets();
for (let a=1; a<totalSheet.length; a++) {
let sheet = ss.getSheets()[a];
let range = sheet.getDataRange();
let values = range.getValues();
function autoCount() {
let rowCount;
for (let i = 0; i < values.length; i++) {
rowCount = i
if (values[i][0] === '') {
break;
}
}
return rowCount
}
rowNum = autoCount()
for(let j=1; j<rowNum+1; j++){
if (sheet.getRange(j+1,7).getValue() === '') {
sheet.getRange(j+1,7).setValue(new Date()).setNumberFormat("yyyy-MM-dd hh:mm:ss");
}
}
}
}
解释
getSheets()
制作了一个getSheets()
,并使用一个for
循环运行它。即识别该电子表格中的工作表总数。注意,在这里,我让let a=1;
假设所有的JavaScript都一样,从0
开始,值1
是跳过第一个工作表,然后在第二个工作表上运行let sheet = ss.getSheets()[a]
。请注意,如果您在const
变量中的值不断地更改,则不应该使用let
,所以使用let
会很好。function autoCount()
。也就是说,创建一个for
循环来计数在其中编辑了值的行数。if (values[i][0] === '')
将导航脚本,搜索具有值的整个工作表,查看行i
和列0
。在这里,0
表示工作表的第一列,而i
是工作表的行。是的,它的工作方式就像一个带有json
感觉的panda
对象。autoCount()
找到被编辑的行数。给它一个rowNum
变量来包含结果。rowNum
传递到一个新的for
循环中,并使用if (sheeet.getRange(j+1,7).getValue() === '')
来确定哪一行没有使用时间戳进行编辑。请注意,这里的7
表示工作表的第7列是我需要时间戳的地方。for
循环中,是以指定的("yyyy-MM-dd hh:mm:ss")
格式对日期进行setValue
。你可以随意编辑成你喜欢的任何风格。On Change
。这并不限于编辑,但是对于所有类型的更改,,包括粘贴。下面是一张截图,介绍一下它的样子:
最后,请注意我的一些背景,然后才决定是否有解决办法为您的情况工作。干杯,快乐编码~!
https://stackoverflow.com/questions/73730882
复制相似问题