谷歌应用程序脚本:创建多日事件//比较多行中的值



我一直在尝试创建一个脚本,该脚本将根据日期列表生成一系列全天事件。日期列表的格式如下:

2020/01/01  promotion offer 1
2020/01/02  promotion offer 1
2020/01/03  promotion offer 2
2020/01/04  promotion offer 2
2020/01/05  promotion offer 2
2020/01/06  promotion offer 3

所以我想做的是创建一个从01月01日到02月01日的活动,标题为"促销优惠1",然后创建另一个从03年01月到05年01月的活动,名称为"促销促销优惠2",然后再创建一个只有一天的活动,名为"促销特惠3"。

我的方法是检查第1行第2列中的值是否与第2行第2栏中的值不同。但我不知道是否可以将该检查包含在"常规"for循环中。所以我试着用两个作为循环。不起作用:D

这就是我迄今为止所尝试的:

var alloffers = spreadsheet.getRange("E133:F141").getValues(); // speichert die Werte in der angegegeben Range in var offerkalender

for (row=0; row<alloffers.length; row++) {

var offer = alloffers[row];
var date = offer[0];
var conditions = offer[1];

}

for (row=1; row>alloffers.length; row++) {

var nextoffer = alloffers[row];
var nextdate = nextoffer[0];
var nextconditions = nextoffer[1];

}

if (conditions != nextconditions) {

eventCal.createAllDayEvent(conditions, date, nextdate);

}

有人能帮忙吗?:(

你帖子上的评论指向了正确的方向。最简单的方法是检查新行是否等于新行,但也要继续检查,以防有其他行。我在下面所做的是检查这些值,并将它们放入一个新的占位符数组中,用于开始日期、结束日期和晋升标题。只要改变alloffers变量的范围,这对你来说就会很有魅力。

注意:在测试中,我注意到日历应用程序正在切断多日活动的最后一天。这是由于对时间事件的处理,因此从2020年1月1日00:00:00到2020年3月1日@00:00:00运行的全天事件将转化为仅在2020年1日和2020年2月1日的全天事件,因此我重新编写了代码,将时间添加到多日事件的结束日期上,从而使其从2020年11月1日@00:00:00运行到2020年1年3月23日23:59:59。

var alloffers = sheet.getRange("Your Range").getValues(); // speichert die Werte in der angegegeben Range in var offerkalender
// create trimmed offers array
var trimmedoffers = [];
// set first array line to the first offer data
trimmedoffers[0] = [alloffers[0][0],alloffers[0][0],alloffers[0][1]];
for (var i=1, s=1; i<alloffers.length; i++) {
// check if offer on this date matches offer on previous date
if (alloffers[i][1] != alloffers[i-1][1]) {
// if it does not, set new offer information into trimmed array
trimmedoffers[s] = [alloffers[i][0],alloffers[i][0],alloffers[i][1]];
s++;
} else {
// if it does, change end date of offer in trimmed array and add on 23:59:59
trimmedoffers[s-1] = [trimmedoffers[s-1][0],new Date(alloffers[i][0].getTime()+86399000),trimmedoffers[s-1][2]]; 
}
}
// use new array to create events based on total number of offers
for (var t=0; t<trimmedoffers.length; t++) {
// check if event is a single day
if (trimmedoffers[t][0] == trimmedoffers[t][1]) {
// if it is, create all day event
eventCal.createAllDayEvent(trimmedoffers[t][2],trimmedoffers[t][0]); 
} else {
// if not, create an event from start time to finish time
eventCal.createEvent(trimmedoffers[t][2],trimmedoffers[t][0],trimmedoffers[t][1]);
}
}

最新更新