迭代范围和匹配值

时间:2016-05-25 00:25:40

标签: google-sheets google-calendar-api

我有一张包含两张纸的电子表格:Week#,Events。

表单“周#”(A列中的日历周#和B列中本周的开始日期):

2016年1月4日

2016年1月11日

2016年1月18日

2016年1月25日

2016年2月1日

等到第52周

工作表“事件”有下一栏:

设施,重复,属于周#,周#开始,项目,行动,状态。

它充满了这样的东西(行数不同):

SalonA,每月,4月,2016年1月25日,地板,拖地,创建

脚本是这样的:

function createEventmanually (title, date)
{
var sheet = SpreadsheetApp.getActiveSheet();
var row = sheet.getActiveRange().getRowIndex();
var EventStatus = sheet.getRange(row, 7).setValue("Created");
var title = sheet.getRange(row,1).getValue()+"  "+"Week "+sheet.getRange(row,3).getValue()+"   "+sheet.getRange(row,5).getValue()+":"+"  "+sheet.getRange(row,6).getValue();
var cal = CalendarApp.getCalendarsByName('RM') [0];
var date = sheet.getRange(row,4).getValue();
var event = cal.createAllDayEvent(title, date);
}

我手动将日历日期从工作表周#复制并粘贴到工作表事件中的“工作周#开始”列。然后每次运行脚本来创建事件。 如何自动化这个过程?我知道它可以通过迭代完成,但我无法弄明白。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果您想要的是每个不同的52个日历活动(每周一个) 在“事件”表中的任务,此代码是您需要执行此操作的方式。

function createAllEventsForTheYear() {
  var allRowsOfDataInEventSheet,allDataInWeekSheet,cal,eventSh,i,j,L,Lj,lastRowInEventSheet,lastRowInWeekSheet,
      lastColumnInEventSheet,lastColInWeekSh,ss,row,
      weekNumberSheet,rowDataBeingProcessedFromEventsSheet,thisEventTitle,thisWeeksDate;

  cal = CalendarApp.getCalendarsByName('RM')[0];
  ss = SpreadsheetApp.getActiveSpreadsheet();

  eventSh = ss.getSheetByName('Events');
  weekNumberSheet = ss.getSheetByName('Week#');

  lastRowInEventSheet = eventSh.getLastRow();
  lastRowInWeekSheet = weekNumberSheet.getLastRow();

  lastColumnInEventSheet = eventSh.getLastColumn();
  lastColInWeekSh = weekNumberSheet.getLastColumn();

  allRowsOfDataInEventSheet = eventSh.getRange(2, 1, lastRowInEventSheet-1, lastColumnInEventSheet).getValues();
  allDataInWeekSheet = weekNumberSheet.getRange(2, 1, lastColInWeekSh-1, lastColInWeekSh).getValues();

  L = allRowsOfDataInEventSheet.length;
  Lj = allDataInWeekSheet.length;

  for (i=0;i<L;i+=1) { //Loop through every row of data in the Events sheet
    rowDataBeingProcessedFromEventsSheet = allRowsOfDataInEventSheet[i];//Get one row of data
    thisEventTitle = rowDataBeingProcessedFromEventsSheet[0] + "Week" + rowDataBeingProcessedFromEventsSheet[2] + "  " + rowDataBeingProcessedFromEventsSheet[4] + ":  " + rowDataBeingProcessedFromEventsSheet[5];

    for (j=0;j<Lj;j+=1) {//For every row in the Events sheet, create an event for every week of the year.  52 events for this event type
      thisWeeksDate = allDataInWeekSheet[j][1];//Get the date from the second column of the data in the Weeks# sheet
      cal.createAllDayEvent(thisEventTitle, thisWeeksDate);
    };

    eventSh.getRange(i+2, 7).setValue("Created");//I starts at 0, data starts on row 2
  };
};

我没有对此进行测试,甚至没有对其进行调试,因此可能无法完美运行。