[英]Change background color for columns with weekend dates in google sheets with apps script?
我正在尝试编写一个脚本来更改包含周末日期的每列的背景颜色。 出于某种原因,剧本在三月份被抛弃了,我不知道为什么。
出于调试目的,我将脚本限制为仅更改星期日。 这是我所知道的:
我 100% 感到困惑。 我无休止地在谷歌上搜索并尝试了很多事情都无济于事! 任何人都知道我遗漏了什么或做错了什么?! 任何帮助将不胜感激!
这是脚本:
//Change column background color for weekend dates
function colorAll() {
var sheet = SpreadsheetApp.getActiveSheet();
var startCol = 2; //start with column B
var endCol = sheet.getLastColumn(); // find last column in the sheet
for (var c = startCol; c <= endCol; c++) { //loop through columns
colorCol(c);
}
}
//Change background color for each column passed to 'c'
function colorCol(c) {
var sheet = SpreadsheetApp.getActiveSheet();
var dataRange = sheet.getRange(1, c, 5, 1); //row 1, column "c", selection size = 5 rows by 1 column
var data = dataRange.getValues();
var col = data[0];
var date = new Date(col);
var dayOfWeek = date.getDay();
//Logs values being passed to each variable in order to help debug process
Logger.log("*** Processing column number: " + c + " now ***");
Logger.log(col);
Logger.log(date);
Logger.log(dayOfWeek);
//If the day of week is Sunday:
if (dayOfWeek == 0) {
dataRange.setBackground("#E8E8E8"); //set weekends to grey
} else {
dataRange.setBackground("#ffffff"); //set non-weekends to white
}
// //If day of week is Sat or Sun:
// if (dayOfWeek == 0 || dayOfWeek == 6) {
// if (col[0] === "") {
// dataRange.setBackgroundRGB(255, 255, 255);
// } else {
// dataRange.setBackground("#E8E8E8");
// }
// }
}
我整理了以下谷歌表进行测试。 权限已设置,因此任何拥有链接的人都可以进行编辑,以便拥有它:)
通过双击 B1,您可以选择您想要的任何开始日期。 底部 3 行返回工作表读取的工作日编号 (1-7)、应用程序脚本读取的工作日编号 (0-6) 以及每列的相应编号 (B=2, C=3,等等)。
另外,万一它有帮助...
3 月 8 日前后日期的最新日志
预期日期模式 = 6, 0, 1, 2, 3
返回的日期模式 = 6, 0, 0, 1, 2
[20-03-10 10:13:05:886 PDT] ***Processing column number: 7 now***
[20-03-10 10:13:05:887 PDT] [Sat Mar 07 00:00:00 GMT-06:00 2020]
[20-03-10 10:13:05:888 PDT] Sat Mar 07 00:00:00 GMT-06:00 2020
[20-03-10 10:13:05:890 PDT] 6.0
[20-03-10 10:13:06:207 PDT] *** Processing column number: 8 now ***
[20-03-10 10:13:06:209 PDT] [Sun Mar 08 00:00:00 GMT-06:00 2020]
[20-03-10 10:13:06:211 PDT] Sun Mar 08 00:00:00 GMT-06:00 2020
[20-03-10 10:13:06:212 PDT] 0.0
[20-03-10 10:13:06:555 PDT] *** Processing column number: 9 now ***
[20-03-10 10:13:06:558 PDT] [Sun Mar 08 23:00:00 GMT-06:00 2020]
[20-03-10 10:13:06:561 PDT] Sun Mar 08 23:00:00 GMT-06:00 2020
[20-03-10 10:13:06:563 PDT] 0.0
[20-03-10 10:13:06:915 PDT] *** Processing column number: 10 now ***
[20-03-10 10:13:06:917 PDT] [Mon Mar 09 23:00:00 GMT-06:00 2020]
[20-03-10 10:13:06:918 PDT] Mon Mar 09 23:00:00 GMT-06:00 2020
[20-03-10 10:13:06:920 PDT] 1.0
[20-03-10 10:13:07:343 PDT] *** Processing column number: 11 now ***
[20-03-10 10:13:07:345 PDT] [Tue Mar 10 23:00:00 GMT-06:00 2020]
[20-03-10 10:13:07:347 PDT] Tue Mar 10 23:00:00 GMT-06:00 2020
[20-03-10 10:13:07:348 PDT] 2.0
记录 4 月 5 日左右的日期
预期日期模式 = 5, 6, 0, 1
返回的日期模式 = 5, 6, 1, 2
[20-03-10 10:13:15:446 PDT] *** Processing column number: 35 now ***
[20-03-10 10:13:15:447 PDT] [Fri Apr 03 23:00:00 GMT-06:00 2020]
[20-03-10 10:13:15:449 PDT] Fri Apr 03 23:00:00 GMT-06:00 2020
[20-03-10 10:13:15:450 PDT] 5.0
[20-03-10 10:13:16:032 PDT] *** Processing column number: 36 now ***
[20-03-10 10:13:16:036 PDT] [Sat Apr 04 23:00:00 GMT-06:00 2020]
[20-03-10 10:13:16:038 PDT] Sat Apr 04 23:00:00 GMT-06:00 2020
[20-03-10 10:13:16:039 PDT] 6.0
[20-03-10 10:13:16:334 PDT] *** Processing column number: 37 now ***
[20-03-10 10:13:16:336 PDT] [Mon Apr 06 00:00:00 GMT-05:00 2020]
[20-03-10 10:13:16:338 PDT] Mon Apr 06 00:00:00 GMT-05:00 2020
[20-03-10 10:13:16:339 PDT] 1.0
[20-03-10 10:13:16:652 PDT] *** Processing column number: 38 now ***
[20-03-10 10:13:16:658 PDT] [Tue Apr 07 00:00:00 GMT-05:00 2020]
[20-03-10 10:13:16:678 PDT] Tue Apr 07 00:00:00 GMT-05:00 2020
[20-03-10 10:13:16:684 PDT] 2.0
提前感谢您的时间和帮助!
更新:添加上述谷歌表的截图以供参考
debugScript_color全部截图
(注意:它说我还不允许嵌入图像,因为我是一个新用户。显然,图像的链接是我能做的最好的。对不起库珀)
在这种情况下的问题是脚本中的时区与工作表中的时区不匹配,更具体地说,这些时区之一正在观察夏令时变化,而另一个则不是,或者正在观察一个月之后。
日志中“第二个”3 月 8 日的时间突然更改为 23:00:00 是主要线索。 请注意之前的时间是 00:00:00 - 午夜。
您的工作表设置为“中部时间”,而您的脚本设置为“中部时间 - 墨西哥城”。 显然他们在三月份不同意。
一种解决方案是确保您的脚本和工作表位于同一时区。
在工作表中,它位于文件 -> 设置下。 在文件 -> 属性下的脚本中。
如果您想保留不同的时区,或者如果您希望脚本成为时区,则需要在代码中采取进一步的操作来手动处理差异,这可能很复杂。 (它也可以像确保日期在中午而不是午夜一样简单)。
尝试这个:
function colorAll() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var sc=2;
var vs=sh.getRange(1,sc,1,sh.getLastColumn()).getValues()[0];
vs.forEach(function(c,i){
var dow=new Date(c).getDay();
//Sun - Sat = 0 - 6
if(dow==6 || dow==0) {
sh.getRange(1,i+sc,5,1).setBackground('#E8E8E8');
}else{
sh.getRange(1,i+sc,5,1).setBackground('#FFFFFF');
}
});
}
动画片:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.