我已经学习了很多东西,我现在这个脚本可以完成它需要做的所有事情,但我不确定它是否是最佳的。该脚本创建具有颜色自定义的日历事件。
在一张表(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');
}
}
});
}
试试这个方法:
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);
}
});
}