Google apps script 在一定条件下,如何在一定范围内更改日期?
在某些情况下,是否有办法使用按钮将一个或多个日期更改为当前日期 在我的示例表中,选项卡“主页”包含用户列表和要执行的检查数(列O“要检查”) 在“股票行情检查”选项卡中,还有A列“用户ID”、I列“最后一次检查”和L列“下一次检查”。下一次检查是根据此时不重要的各种因素进行计算的 现在,我想为每个用户在选项卡“主页”上添加一个按钮,以将选项卡“股票代码检查”中第I列“上次检查”的所有日期设置为当前日期,其中各行中第L列“下次检查”的日期为今天或过去(在示例表中,由于条件格式的原因,相关单元格被涂成红色)。这意味着仍然在未来的日期应该不受影响 注意:在J列中,时间戳是由脚本生成的,我在下面附加了一个脚本。除其他事项外,此时间戳由第I列“最后一次检查”中“股票代码检查”选项卡中的条目触发。因此,对我来说,这一功能不受干扰是很重要的 不幸的是,我没有足够的编程知识。因此,我将非常感谢能够从中学习的解决方案 这是我的工作表的链接。 }工作流程如下所示:Google apps script 在一定条件下,如何在一定范围内更改日期?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,在某些情况下,是否有办法使用按钮将一个或多个日期更改为当前日期 在我的示例表中,选项卡“主页”包含用户列表和要执行的检查数(列O“要检查”) 在“股票行情检查”选项卡中,还有A列“用户ID”、I列“最后一次检查”和L列“下一次检查”。下一次检查是根据此时不重要的各种因素进行计算的 现在,我想为每个用户在选项卡“主页”上添加一个按钮,以将选项卡“股票代码检查”中第I列“上次检查”的所有日期设置为当前日期,其中各行中第L列“下次检查”的日期为今天或过去(在示例表中,由于条件格式的原因,相关单元格被涂
var today=new date()检索今天的日期
getTime()
for循环中所需的用户ID的行,在I列中设置今天的日期
插入图形
,右键单击该按钮,选择分配脚本…
,并在按钮单击时插入要运行的功能的名称,如图所示李>
以下是您可以如何实现它:
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);
}
}
}
}
函数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(行,列,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=新日期();
var dateInMs=新日期(today.getFullYear()、today.getMonth()、today.getDate()).getTime();
for(var i=0;i=nextDate.getTime()){
rangeLastCheck.getCell(i+1,1).setValue(今天);
}
}
}
}
对于其他用户,创建函数myButton2()
和myButton3()
,相应地调整userId
,并将函数绑定到相应的按钮
参考:
哇!这是伟大的,几乎正是我所需要的。是否可以只更改单个用户的日期(参见A12列)?问题是,用户应该只能为自己的行更改日期。因此,我想为每个用户在选项卡“主页”列Q中放置一个按钮。在我的最后一页中,最多有40个用户。如果您想为每个用户创建一个单独的按钮,您需要为每个用户创建一个稍微修改的功能,请参阅我的更新答案。但是,如果您有许多用户,您可能会考虑其他解决方案,例如实现一个动态对话框/侧栏,提示用户输入将传递给函数的Id。当我启动脚本时,会出现一个引用错误:“userID”未定义。但是,这是一个实现动态提示的好建议。我该怎么做?对不起,我拼错了变量名,在两种情况下都应该是userID,或者在两种userID中都应该是。我只是在代码中修改了它。没问题。我非常感谢你的帮助。不幸的是,我的时间戳脚本无法识别列I中myButton1脚本所做的更改。原因是什么?我的时间戳脚本在H或I列中注册更改,然后在J列中创建一个时间戳,这是计算L列中我的公式所需的。如何解决这个问题?
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);
}
}
}
}