在某些情况下是否可以使用按钮将一个或多个日期更改为当前日期?
在我的示例表中,“主页”选项卡包含用户列表和要执行的检查数量(“检查”列O)。
在选项卡“ Ticker Check”中,还有列A“用户ID”,列I“上次检查”和列L“下一次检查”。下一步检查是基于目前不重要的各种因素计算的。
现在,我想为每个用户添加一个按钮到“主页”选项卡,以将“行情检查”选项卡中的列I“最后检查”的所有日期设置为当前日期,其中“列L”的日期为“相应行中的“下一个检查”是今天还是过去(在示例表中,由于条件格式,相关单元格显示为红色)。这意味着仍在将来的日期不受影响。
注意:在J列中,时间戳是由脚本生成的,我在下面附加了该脚本。除其他事项外,此时间戳由列I“最后检查”中“选项卡检查”选项卡中的条目触发。因此,对我来说重要的是,请勿干扰此功能。
不幸的是,我没有足够的编程知识。因此,我将非常感谢我可以学习的解决方案。
这是我的工作表的链接。 https://docs.google.com/spreadsheets/d/1z8Yom8oyfK8YVljndw1mSicdzkokbfCxm_U1vKSJk9k/edit?usp=sharing
function onEdit(e)
{
var timezone = "GMT+2";
var timestamp_format = "HH:mm:ss"; // Timestamp Format.
var updateColName = "date";
var updateColName1 = "Monat"; // define your 2nd column
var timeStampColName = "timestamp";
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getActiveSheet();
//var sheet = e.source.getActiveSheet()
//var sheet = e.source.getSheetByName('Geprüfte Ticker'); //Name of the sheet where you want to run this script.
var actRng = SpreadsheetApp.getActiveRange();
var editColumn = actRng.getColumn();
var index = actRng.getRowIndex();
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
var dateCol = headers[0].indexOf(timeStampColName);
var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1;
if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself!
var cell = sheet.getRange(index, dateCol + 1);
var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
cell.setValue(date);
}
//add code to update time/date stamp if the additionally defined columns have changes
var dateCol = headers[0].indexOf(timeStampColName);
var updateCol = headers[0].indexOf(updateColName1); updateCol = updateCol+1;
if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if ‘Last Updated’ header exists, but not in the header row itself!
var cell = sheet.getRange(index, dateCol + 1);
var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
cell.setValue(date);
}
}
答案 0 :(得分:0)
var today=new Date()
检索今天的日期getTime()
进行比较,将L列中的日期与今天进行比较for loop
中的所需用户ID的行设置今天的日期。
Insert Drawing
,右键单击按钮,选择Assign script...
,然后插入要在按钮单击时运行的函数的名称,如图here所示。 这是实现它的方法:
function myButton1(){
var userId=1;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var tickerCheck = ss.getSheetByName('Ticker Check');
var startRow=12;
var lastRow=tickerCheck.getLastRow()-startRow+1;
var range=tickerCheck.getRange(startRow,12,lastRow,1)// getRange(row, column, numRows, numColumns)
var valuesNextCheck=range.getValues();
var userIds=tickerCheck.getRange(startRow,1,lastRow,1).getValues();
var rangeLastCheck=tickerCheck.getRange(startRow,9,lastRow,1);
var today=new Date();
var dateInMs=new Date(today.getFullYear(), today.getMonth(), today.getDate()).getTime();
for(var i=0;i<valuesNextCheck.length;i++){
var nextDate=valuesNextCheck[i][0]
if((nextDate instanceof Date)&&(userIds[i][0]==userId)){
if(dateInMs>=nextDate.getTime()){
rangeLastCheck.getCell(i+1, 1).setValue(today);
}
}
}
}
对于其他用户,创建功能myButton2()
和myButton3()
,相应地调整userId
,然后将功能绑定到相应的按钮。
参考:Date objects