我做了一张谷歌单子,用来处理我的药物。
在A栏,我服用了一种下降药。最初吃药的时间并不重要,但重要的是,当我吃下一片药时,每次吃药的时间是不同的。一颗药丸,服用后,我需要服用下一个6小时后,而另一个,我不吃,直到24小时后。我每天都会在不同的时间睡觉,所以我开始服用避孕药的时间取决于我什么时候醒来,或者什么时候吃早餐之类的。最重要的是我需要等6个小时才能再次服用。那是我的止痛药。
到目前为止,我有表设置,所以我有下拉列表的药物和第2栏输入确切的日期和时间,我采取的药片。在第三栏,我有一个公式,设置为第2栏,并增加6小时,这是不正确的所有药物,所以这是我需要帮助。我知道这是可以做到的,但我不知道该问谁。如果我能得到它,以便第三栏将看到我选择了什么药物,然后取决于哪一种,它将投入的时间,我需要采取下一个。这是我到目前为止所得到的,但是使用一个公式来增加6个小时,这也是为什么这个公式行不通的原因:
工作表
Medication Pill-taken-at +6 hours
----------------------------------------------------------
Mycoxofloppin 2018-03-17 12:44 2018-03-17 18:44
Maryjaneaspliff 2018-03-16 04:20 2018-03-16 10:20脚本
function onEdit(e) {
var timezone = "GMT-5";
var timestamp_format = "yyyy-MM-dd hh:mm";
var ss = e.source.getActiveSheet();
var start = 2;
var end = 4;
var row = e.range.getRow();
if (e.range.getColumn() == 1){
ss.getRange(row, start).setValue(new Date());
}
}发布于 2018-03-18 00:04:50
Range::getValue会在Google的API中获取单元格的值。我假设您的单元格类型为DateTime,因此getValue()将为您提供一个JavaScript Date值,您可以轻松地对其执行日期计算。
如果您的单元格键入正确,则不需要担心时区或日期格式。(“输入”与“数据类型”相同,而不是“键盘键入”)。
function onEdit(event) {
var range = event.range;
if( range.getColumn() != 1 && range.getColumn() != 2 ) {
// Only update when column 1 or 2 are updated.
return;
}
var rowNumber = range.getRow();
var ss = event.source.getActiveSheet();
var drugName = ss.getRange( rowNumber, 1 ).getValue();
var lastDoseTime = ss.getRange( rowNumber, 2 ).getValue();
// Validate info in the edited row:
if( !drugName ) {
console.warn( "No drug name specified in col 1, row %d.", rowNumber );
return;
}
if( !( lastDoseTime instanceof Date ) ) {
console.warn("No valid date value in col 2, row %d.", rowNumber );
return;
}
var hoursUntilNextDose = getTimeBetweenDosesInHours( drugName );
if( !hoursUntilNextDose ) {
console.warn("No dose time available for the drug \"%s\".", drugName );
return;
}
var timeUntilNextDoseInMilliseconds = hoursUntilNextDose * 60 * 60 * 1000;
var nextDoseUnix = lastDoseTime.getTime() + timeUntilNextDoseInMilliseconds;
var nextDoseTime = new Date( nextDoseUnix );
ss.getRange( rowNumber, 3 ).setValue( nextDoseTime );
}
function getTimeBetweenDosesInHours( drugName ) {
// toUpperCase() is more robust than toLowerCase(): https://msdn.microsoft.com/en-us/library/bb386042.aspx
switch( drugName.toUpperCase() ) {
case "MYCOXOFLOPPIN" : return 6;
case "MARYJANEASPLIFF": return 4.20;
case "GYM" : return 365 * 24;
default : return null;
}
}https://stackoverflow.com/questions/49342988
复制相似问题