Excel 在google日历和电子表格之间未生成预期结果
因此,我有一些代码,可以根据会议的工作表创建日历事件,但我似乎无法让它像我预期的那样工作-我有第24列和第25列要跟踪它是否被放入日历和日历事件id,我不希望它被删除,然后为已经添加的事件创建一个新事件(因为这个电子表格可能会变大)这就是为什么我会在编辑时跟踪via的原因。但它似乎每次都会创建一个新的事件。如果有人能看一下,那就太好了,因为我已经为此奋斗了3天。 非常感谢Excel 在google日历和电子表格之间未生成预期结果,excel,google-apps-script,calendar,Excel,Google Apps Script,Calendar,因此,我有一些代码,可以根据会议的工作表创建日历事件,但我似乎无法让它像我预期的那样工作-我有第24列和第25列要跟踪它是否被放入日历和日历事件id,我不希望它被删除,然后为已经添加的事件创建一个新事件(因为这个电子表格可能会变大)这就是为什么我会在编辑时跟踪via的原因。但它似乎每次都会创建一个新的事件。如果有人能看一下,那就太好了,因为我已经为此奋斗了3天。 非常感谢 //push new events to calendar; function pushToCalendar() {
//push new events to calendar;
function pushToCalendar() {
//spreadsheet variables
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow();
var range = sheet.getRange(2,1,lastRow,26);
var values = range.getValues();
var updateRange = sheet.getRange('Z1');
//calendar variables
var calendar = CalendarApp.getCalendarById('insert calendar code here')
//show updating message
updateRange.setFontColor('red');
var numValues = 0;
for (var i = 0; i < values.length; i++) {
//check to see if name are filled out
if ((values[i][0].length > 0) && (values[i][1].length > 0)) {
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// if it has been edited delete old event
if (values[i][23] ='n') {
try{
var eventIdCell =values[i][24];
var eventId =calendar.getEventSeriesById(eventIdCell);
eventId.deleteEventSeries();
}
catch (e) {
// do nothing - we just want to delete if it has been edited and the old event if it still exists
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//check if it's been entered before
if (values[i][23] !='y') {
var newEventTitle = values[i][0] + ' - ' + values[i][1]+' - ' + 'Sample';
var newEvent = calendar.createAllDayEvent(newEventTitle, new Date(values[i][6]));
//get ID
var newEventId = newEvent.getId();
//mark as entered, enter ID
sheet.getRange(i+2,24).setValue('y');
sheet.getRange(i+2,25).setValue(newEventId);
}
}
numValues++;
}
//hide updating message
updateRange.setFontColor('white');
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//add a menu when the spreadsheet is opened
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [];
menuEntries.push({name: "Update Calendar", functionName: "pushToCalendar"});
sheet.addMenu("Jobs Calendar", menuEntries);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
function onEdit(event){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var actSht = event.source.getActiveSheet();
var actRng = event.source.getActiveRange();
var activeCell = actSht.getActiveCell();
var row = activeCell.getRow();
if(row < 2){
return; //If header row then return
}
else{
var index = actRng.getRowIndex();
var updateCalCell = actSht.getRange(index,24);
var eventIdCell = actSht.getRange(index,25);
change updated on colander status to n
updateCalCell.setValue('n');
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//将新事件推送到日历中;
函数pushToCalendar(){
//电子表格变量
var sheet=SpreadsheetApp.getActiveSheet();
var lastRow=sheet.getLastRow();
var范围=sheet.getRange(2,1,最后一行,26);
var values=range.getValues();
var updateRange=sheet.getRange('Z1');
//日历变量
var calendar=CalendarApp.getCalendarById('在此处插入日历代码')
//显示更新消息
setFontColor('red');
var numValues=0;
对于(var i=0;i0)和&(值[i][1]。长度>0)){
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//如果已编辑,请删除旧事件
如果(值[i][23]='n'){
试一试{
var eventIdCell=值[i][24];
var eventId=calendar.getEventSeriesById(eventIdCell);
eventId.deleteEventSeries();
}
捕获(e){
//不执行任何操作-我们只想删除已编辑的事件,并删除仍存在的旧事件
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//检查以前是否输入过
如果(值[i][23]!='y'){
var newEventTitle=values[i][0]+'-'+values[i][1]+'-'+'Sample';
var newEvent=calendar.createAllDayEvent(newEventTitle,新日期(值[i][6]);
//取得身份证
var newEventId=newEvent.getId();
//标记为已输入,输入ID
表.getRange(i+2,24).setValue('y');
sheet.getRange(i+2,25).setValue(newEventId);
}
}
numValues++;
}
//隐藏更新消息
updateRange.setFontColor(“白色”);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//打开电子表格时添加菜单
函数onOpen(){
var sheet=SpreadsheetApp.getActiveSpreadsheet();
var指数=[];
push({name:“更新日历”,functionName:“pushToCalendar”});
添加菜单(“工作日历”,菜单);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
函数onEdit(事件){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var actSht=event.source.getActiveSheet();
var actRng=event.source.getActiveRange();
var activeCell=actSht.getActiveCell();
var row=activeCell.getRow();
如果(第2行){
return;//如果是标题行,则返回
}
否则{
var index=actRng.getRowIndex();
var updateCalCell=actSht.getRange(索引,24);
var eventIdCell=actSht.getRange(索引,25);
将colander状态更新为n
updateCalCell.setValue('n');
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
您在条件中犯了一个简单的错误:比较中的相等运算符是=
而不是=
,更改该值,它将起作用
if (values[i][23] =='n') {
你可以用一些数据创建一个共享的SS副本以便于测试吗?当然这是链接::D非常感谢我在错误的地方寻找问题