我制作了一张处理药物的Google表格。
在A栏中,我服用了一系列药物。我最初服用药物的时间并不重要,但重要的是当我服用下一个药丸时,每个药丸都不同。一粒药丸,服用后,我需要在6小时后服用另一颗药丸,而另一颗药丸,直到24小时后才能服用。我每天都会在不同的时间睡觉,所以当我服用初始药丸时,取决于我什么时候醒来或者吃早餐等。最重要的一个是我需要等待6个小时才能再拿一次。那是我的止痛药。
到目前为止,我已经设置了表格,以便我有药物的下拉列表,第2列输入我服用避孕药的确切日期和时间。第3列,我有一个公式,设置为第2列并添加6小时,这对所有meds都不正确,所以这是我需要帮助的地方。我知道可以做到,但我不知道该问谁。如果我能得到它,那么第3列将会看到我选择了什么药物,然后根据哪个药物将我需要的时间用于下一个药物。这是我到目前为止所使用的公式,但是使用一个公式来增加适用于所有人的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());
}
}
答案 0 :(得分:1)
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;
}
}
答案 1 :(得分:1)
使用表格:说
Y1: Pill Name Z1:(Interval(hrs)) Y2: Dumiliyuop Z2: 6 Y3: WhacyHittlir Z3:18
C2:
=B2+VLOOKUP(A2,Y:Z,2,0)/24