我有一个电子表格,我想根据日期有条件地格式化。如果日期是7天之后,我希望细胞变成红色,如果日期是14天,我希望它变成绿色等等。
我认为,执行此操作的第一步是创建一个简单的条件格式脚本,如果日期是今天,则会突出显示。但我的代码不起作用:(
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 = Utilities.formatDate(new Date(), "GMT", "MM/dd/yyyy"); // get today's date
for (var i = 0; i < fValues.length; i++) { // repeat loop
if (fValues[i][0] == today) { // if the date in the cell is today's date...
sheet.getRange(i + 2, 6, 1, 1).setBackgroundColor('green'); // ...turn that cell green
}
}
}
我做错了什么?
谢谢!
答案 0 :(得分:5)
您不应该将日期转换为字符串,您可以像在Srik的答案中那样解析日期,月份和年份中的日期,或者您也可以使用下面的原始值来比较日期,这样可以更容易地计算其他日期。 ..我创建了一些变量来简化数学运算:
day
=一天中的毫秒数
today
=今天的00:00(以天为单位)
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')}
}
}
可用的测试表here
答案 1 :(得分:2)
您无法直接比较Date对象。您需要按日期,月份和年份进行比较。尝试像
这样的东西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
}
}
}
答案 2 :(得分:0)
我想补充一下Serge的帖子,在第8行你最好不要使用getDate()调用。这是因为如果您在工作表本身中复制/粘贴了值,则fValues数组中的条目不一定是日期。