我正在嘗試撰寫腳本以將電子表格中的事件添加到我的谷歌日歷。這是我正在使用的腳本。
function addEvents() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lr = ss.getLastRow();
var cal = CalendarApp.getCalendarById("c_fe882662e583725f15fd4faa8c8fdf5124f3affe543778ecdcf0838d6eb17f26@group.calendar.google.com")
var data = ss.getRange("A3:D" lr).getValues();
for(var i = 0;i<data.length;i ){
cal.createEvent(data[i][2],data[i][4],data[i][5],{location: data[i][6], description: data[i][7]});
}
}
當我運行腳本時,我收到以下錯誤。錯誤例外:無效引數:startTime addEvents @ Code.gs:10
這是我在約會時使用的表格。
https://docs.google.com/spreadsheets/d/1qG68-NLnq9LscPPzlnzRLCfHFisN3v7V5zvWiVsG0qU/edit?usp=sharing
我希望事件的標題為 C 列,開始時間為 E 列,結束時間為 F 列,位置 G 和描述 H。
uj5u.com熱心網友回復:
修改點:
在您的腳本中,在 for 回圈中,
data[i][4],data[i][5]用作開始和結束時間。而且,data[i][7]被使用。但是,在 處var data = ss.getRange("A3:D" lr).getValues();,檢索到“A”到“D”的 4 列。我認為這可能是您的問題的原因。在這種情況下,它必須是var data = ss.getRange("A3:H" lr).getValues()。但是,當我看到您的電子表格時,開始和結束時間沒有年份和月份。在這種情況下,
1899使用年份。請注意這一點。從您的電子表格中,我猜您可能想要使用“A”列中的年、月和日期。
當我了解您當前的問題和您的目標后,如何進行以下修改?
修改后的腳本:
function addEvents() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lr = ss.getLastRow();
var cal = CalendarApp.getCalendarById("c_fe882662e583725f15fd4faa8c8fdf5124f3affe543778ecdcf0838d6eb17f26@group.calendar.google.com");
var data = ss.getRange("A3:I" lr).getValues();
while (data[data.length - 1][0] == '') data.pop();
for (var i = 0; i < data.length; i ) {
var year = data[i][8].getFullYear();
var month = data[i][8].getMonth();
var date = data[i][8].getDate();
data[i][4].setFullYear(year);
data[i][4].setMonth(month);
data[i][4].setDate(date);
data[i][5].setFullYear(year);
data[i][5].setMonth(month);
data[i][5].setDate(date);
cal.createEvent(data[i][2], data[i][4], data[i][5], { location: data[i][6], description: data[i][7] });
}
}
運行此腳本時,將分別從“E”和“F”列檢索開始時間和結束時間。而且,年、月、日從列“A”中檢索。使用這些值可以創建開始日期和結束日期,并將它們與
createEvent.當您想使用年、月和日期的其他值而不是“A”列時,請告訴我。
筆記:
從您的回復中
This sounds promising, the sheet that I am using is actually setting up a mail merge as well and the date in column A is for the mail merge and not for the calendar. I would actually like column I to be the date for the calendar events.,我修改了上面的腳本。根據您的回復
If I run this script twice (or multiple times) as I will continue to add events, it seems to duplicate the events that are already added. Any idea how to eliminate that?,我將上述腳本更新如下。function addEvents() { var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var lr = ss.getLastRow(); var cal = CalendarApp.getCalendarById("c_fe882662e583725f15fd4faa8c8fdf5124f3affe543778ecdcf0838d6eb17f26@group.calendar.google.com"); var data = ss.getRange("A3:R" lr).getValues(); while (data[data.length - 1][0] == '') data.pop(); var rangeList = []; for (var i = 0; i < data.length; i ) { if (data[i][17] == "created") continue; var year = data[i][8].getFullYear(); var month = data[i][8].getMonth(); var date = data[i][8].getDate(); data[i][4].setFullYear(year); data[i][4].setMonth(month); data[i][4].setDate(date); data[i][5].setFullYear(year); data[i][5].setMonth(month); data[i][5].setDate(date); cal.createEvent(data[i][2], data[i][4], data[i][5], { location: data[i][6], description: data[i][7] }); rangeList.push(`R${i 3}`); } if (rangeList.length == 0) return; ss.getRangeList(rangeList).setValue("created"); }
uj5u.com熱心網友回復:
嘗試改變這個:cal.createEvent(data[i][2],data[i][4],data[i][5],{location: data[i][6], description: data[i][7]});到這個cal.createEvent(data[i][2],new Date(data[i][4]),new Date(data[i][5]),{location: data[i][6], description: data[i][7]});
試試把這個改成var data = ss.getRange("A3:D" lr).getValues();這個var data = ss.getRange("A3:H" lr).getValues();
嘗試這個:
function addEvents() {
const ss = SpreadsheetApp.getActive();
var sh = ss.getActiveSheet();
var cal = CalendarApp.getCalendarById("[email protected]")
var data = sh.getRange("A3:H" sh.getLastRow()).getValues();
for (var i = 0; i < data.length; i ) {
cal.createEvent(data[i][2], data[i][4], data[i][5], { location: data[i][6], description: data[i][7] });
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/526965.html
