Google apps script 如何使用GoogleApps脚本将日期与电子表格进行比较?
我有一个电子表格,我想有条件的格式根据日期。如果离日期还有7天,我希望单元格变成红色,如果离日期还有14天,我希望单元格变成绿色,等等 我想,实现这一点的第一步是创建一个简单的条件格式脚本,如果日期是今天,它就会突出显示。但我的代码不起作用:(Google apps script 如何使用GoogleApps脚本将日期与电子表格进行比较?,google-apps-script,Google Apps Script,我有一个电子表格,我想有条件的格式根据日期。如果离日期还有7天,我希望单元格变成红色,如果离日期还有14天,我希望单元格变成绿色,等等 我想,实现这一点的第一步是创建一个简单的条件格式脚本,如果日期是今天,它就会突出显示。但我的代码不起作用:( 函数格式化(){ var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');//获取工作表 var columnF=sheet.getRange(2,6,sheet.
函数格式化(){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');//获取工作表
var columnF=sheet.getRange(2,6,sheet.getLastRow()-1,1);//获取所有行
var fValues=columnF.getValues();//获取值
var today=Utilities.formatDate(新日期(),“GMT”,“MM/dd/yyyy”);//获取今天的日期
对于(var i=0;i
我做错了什么
谢谢!您不能直接比较日期对象。您需要按日期、月份和年份进行比较。请尝试类似的操作
function formatting() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); // get the sheet
var columnF = sheet.getRange(2, 6, sheet.getLastRow()-1, 1); // get all the rows
var fValues = columnF.getValues(); // get the values
var today = new Date();
for (var i = 0; i < fValues.length; i++) { // repeat loop
var fDate = new Date(fValues[i][0]);
if (fDate.getDate() == today.getDate() &&
fDate.getMonth() == today.getMonth() &&
fDate.getFullYear() == today.getFullYear()) { // if the date in the cell is today's date...
sheet.getRange(i + 2, 6, 1, 1).setBackgroundColor('green'); // ...turn that cell green
}
}
}
函数格式化(){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');//获取工作表
var columnF=sheet.getRange(2,6,sheet.getLastRow()-1,1);//获取所有行
var fValues=columnF.getValues();//获取值
var today=新日期();
对于(var i=0;i
您不应该将日期转换为字符串,您可以像在Srik的答案中那样以天、月和年为单位解析日期,或者您也可以使用其本机值比较日期,如下所示,计算其他日期变得更容易…我创建了几个变量以简化数学计算:
day
=一天中的毫秒数
今天
=今天的日期00:00(以天为单位)
函数格式化(){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');//获取工作表
var columnF=sheet.getRange(2,6,sheet.getLastRow()-1,1).setBackgroundColor('white');//获取所有行和清晰的颜色
var fValues=columnF.getValues();//获取值
var日=24*3600*1000
var today=parseInt((new Date().setHours(0,0,0,0))/day);//获取今天的日期
对于(var i=0;i
可用的测试表我想在Serge的帖子中补充一点,在第8行中,您最好不要使用getDate()调用。这是因为如果您已将值复制/粘贴到工作表中,则fValues数组中的条目不一定是日期。因此,如果我想将日期为2周或更短的单元格变为绿色,该怎么办?这是不可能的,因为我必须引用确切的日期、月份和年份?我正在尝试使用相同的代码来获取日期在我的工作表中输入的值。日期的格式为-mm/dd/yyyy。我使用上面相同的代码通过与今天的日期进行比较来检查工作表中的日期是否超过30天。我收到以下错误-“getTime()不能用于对象”。如果我不使用日期对象,我理解会发生这种情况,但我不知道如何更正。非常感谢您的帮助!您在其中读取值的单元格是“日期格式的单元格”还是字符串?您可以通过单击它来检查,如果是日期单元格,它应该打开日历…如果不是,则什么也不做。
function formatting() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); // get the sheet
var columnF = sheet.getRange(2, 6, sheet.getLastRow()-1, 1); // get all the rows
var fValues = columnF.getValues(); // get the values
var today = new Date();
for (var i = 0; i < fValues.length; i++) { // repeat loop
var fDate = new Date(fValues[i][0]);
if (fDate.getDate() == today.getDate() &&
fDate.getMonth() == today.getMonth() &&
fDate.getFullYear() == today.getFullYear()) { // if the date in the cell is today's date...
sheet.getRange(i + 2, 6, 1, 1).setBackgroundColor('green'); // ...turn that cell green
}
}
}
function formatting() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); // get the sheet
var columnF = sheet.getRange(2, 6, sheet.getLastRow()-1, 1).setBackgroundColor('white'); // get all the rows and clear colors
var fValues = columnF.getValues(); // get the values
var day = 24*3600*1000
var today = parseInt((new Date().setHours(0,0,0,0))/day); // get date today
for (var i = 0; i < fValues.length; i++) { // repeat loop
var dataday = parseInt(fValues[i][0].getTime()/day)
Logger.log(dataday+' = '+today)
if (dataday == today-7) {sheet.getRange(i + 2, 6, 1, 1).setBackgroundColor('red')}
else if (dataday == today-14){sheet.getRange(i + 2, 6, 1, 1).setBackgroundColor('green')}
else if (dataday == today-21){sheet.getRange(i + 2, 6, 1, 1).setBackgroundColor('blue')}
}
}