优化脚本创建带有颜色的事件的帮助

问题描述 投票:0回答:1

我已经学习了很多东西,我现在这个脚本可以完成它需要做的所有事情,但我不确定它是否是最佳的。该脚本创建具有颜色自定义的日历事件。

在一张表(help_sheet)中,我有calendar_Id以及下拉列表来确定将创建的事件的不同颜色。在另一张表(data_sheet)中,我的数据结构如下:

A 列复选框

B 列类型_颜色

C 栏标题

D 栏开始日期

E 栏结束日期

H 列事件ID

有哪些优化方法?我感觉对不同颜色的调用没有优化,但我还没有学会如何做到这一点。这就是数组和对象的用武之地吗?

谢谢大家!

function CreateSelectionToCalendar() {
  var sheetHelp = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('help_sheet');
  var CalendarID = sheetHelp.getRange(1,1).getValue();
  var cal = CalendarApp.getCalendarById(CalendarID);

  var sheetData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('data_sheet');
  var rows = sheetData.getDataRange().getValues();
  var headers = rows.shift();
  
  rows.forEach(function(row, i) { 
    if(row[0]) {
      Logger.log(JSON.stringify(row));
      var type = row[1]
      var title = row[2];
      var tstart = row[3];
      var tstop = row[4];
      var eventID = row[7];

      var fillPaleBlue = sheetHelp.getRange(2,1).getValue();
      var fillPaleGreen = sheetHelp.getRange(3,1).getValue();
      var fillMauve = sheetHelp.getRange(4,1).getValue();
      var fillPaleRed = sheetHelp.getRange(5,1).getValue();
      var fillYellow = sheetHelp.getRange(6,1).getValue();
      var fillOrange = sheetHelp.getRange(7,1).getValue();
      var fillCyan = sheetHelp.getRange(8,1).getValue();
      var fillGray = sheetHelp.getRange(9,1).getValue();
      var fillBlue = sheetHelp.getRange(10,1).getValue();
      var fillGreen = sheetHelp.getRange(11,1).getValue();
      var fillRed = sheetHelp.getRange(12,1).getValue();

      var newEvent = cal.createEvent(title, tstart, tstop,);

      if (type === fillPaleBlue) {
        newEvent.setColor('1');
      } else if (type === fillPaleGreen) {
        newEvent.setColor('2');
      } else if (type === fillMauve) {
        newEvent.setColor('3');
      } else if (type === fillPaleRed) {
        newEvent.setColor('4');
      } else if (type === fillYellow) {
        newEvent.setColor('5');
      } else if (type === fillOrange) {
        newEvent.setColor('6');
      } else if (type === fillCyan) {
        newEvent.setColor('7');
      } else if (type === fillGray) {
        newEvent.setColor('8');
      } else if (type === fillBlue) {
        newEvent.setColor('9');
      } else if (type === fillGreen) {
        newEvent.setColor('10');
      } else if (type === fillRed) {
        newEvent.setColor('11');
      }
    }
  });
}
google-apps-script optimization colors
1个回答
0
投票

试试这个方法:

function CreateSelectionToCalendar() {
  const ss = SpreadsheetApp.getActive();
  const hsh = ss.getSheetByName('help_sheet');
  const CalendarID = hsh.getRange(1, 1).getValue();
  const cal = CalendarApp.getCalendarById(CalendarID);
  const dsh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('data_sheet');
  const rows = dsh.getDataRange().getValues();
  const headers = rows.shift();
  rows.forEach(function (row, i) {
    if (row[0]) {
      let [, type, title, tstart, tstop, , , eventID] = row
      let [[fillPaleBlue], [fillPaleGreen], [fillMauve], [fillPaleRed], [fillYellow], [fillOrange], [fillCyan], [fillGray], [fillBlue], [fillGreen], [fillRed]] = hsh.getRange("A2:A12").getValues()
      let arr = [[fillPaleBlue], [fillPaleGreen], [fillMauve], [fillPaleRed], [fillYellow], [fillOrange], [fillCyan], [fillGray], [fillBlue], [fillGreen], [fillRed]].flat();
      let newEvent = cal.createEvent(title, tstart, tstop);
      newEvent.setColor(arr.indexOf(type) + 1);
    }
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.