Google apps script 如何仅更新id列并避免丢失Speedsheet中的所有公式
代码没问题。我唯一的问题是带有Google apps script 如何仅更新id列并避免丢失Speedsheet中的所有公式,google-apps-script,Google Apps Script,代码没问题。我唯一的问题是带有range.setValues的最后一部分(日期)这部分工作得很好,但不幸的是更新了整个电子表格。我只想更新第6列 /** * Adds a custom menu to the active spreadsheet, containing a single menu item * for invoking the exportEvents() function. * The onOpen() function, when defined, is au
range.setValues的最后一部分(日期)代码>这部分工作得很好,但不幸的是更新了整个电子表格。我只想更新第6列
/**
* Adds a custom menu to the active spreadsheet, containing a single menu item
* for invoking the exportEvents() function.
* The onOpen() function, when defined, is automatically invoked whenever the
* spreadsheet is opened.
* For more information on using the Spreadsheet API, see
* https://developers.google.com/apps-script/service_spreadsheet
*/
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Export Events",
functionName : "exportEvents"
}];
sheet.addMenu("Calendar Actions", entries);
};
/**
* Export events from spreadsheet to calendar
*/
function exportEvents() {
var sheet = SpreadsheetApp.getActiveSheet();
var headerRows = 1; // Number of rows of header info (to skip)
var range = sheet.getDataRange();
var data = range.getValues();
var calId = "YOUR_CALENDAR_ID";
var cal = CalendarApp.getCalendarById(calId);
for (i=0; i<data.length; i++) {
if (i < headerRows) continue; // Skip header row(s)
var row = data[i];
var date = new Date(row[0]); // First column
var title = row[1]; // Second column
var tstart = new Date(row[2]);
tstart.setDate(date.getDate());
tstart.setMonth(date.getMonth());
tstart.setYear(date.getYear());
var tstop = new Date(row[3]);
tstop.setDate(date.getDate());
tstop.setMonth(date.getMonth());
tstop.setYear(date.getYear());
var loc = row[4];
var desc = row[5];
var id = row[6]; // Sixth column == eventId
// Check if event already exists, update it if it does
try {
var event = cal.getEventSeriesById(id);
}
catch (e) {
// do nothing - we just want to avoid the exception when event doesn't exist
}
if (!event) {
//cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00"), {description:desc,location:loc});
var newEvent = cal.createEvent(title, tstart, tstop, {description:desc,location:loc}).getId();
row[6] = newEvent; // Update the data array with event ID
}
else {
event.setTitle(title);
event.setDescription(desc);
event.setLocation(loc);
// event.setTime(tstart, tstop); // cannot setTime on eventSeries.
// ... but we CAN set recurrence!
var recurrence = CalendarApp.newRecurrence().addDailyRule().times(1);
event.setRecurrence(recurrence, tstart, tstop);
}
debugger;
}
// Record all event IDs to spreadsheet
range.setValues(data);
}
/**
*将自定义菜单添加到活动电子表格,其中包含单个菜单项
*用于调用exportEvents()函数。
*定义onOpen()函数后,每当
*电子表格已打开。
*有关使用电子表格API的更多信息,请参见
* https://developers.google.com/apps-script/service_spreadsheet
*/
函数onOpen(){
var sheet=SpreadsheetApp.getActiveSpreadsheet();
变量项=[{
名称:“导出事件”,
函数名:“exportEvents”
}];
sheet.addMenu(“日历操作”,条目);
};
/**
*将事件从电子表格导出到日历
*/
函数exportEvents(){
var sheet=SpreadsheetApp.getActiveSheet();
var headerRows=1;//标题信息的行数(要跳过)
var range=sheet.getDataRange();
var data=range.getValues();
var calId=“您的日历ID”;
var cal=CalendarApp.getCalendarById(calId);
对于(i=0;i我更改了底部的代码,只得到第六列:
function exportEvents() {
var sheet = SpreadsheetApp.getActiveSheet();
var headerRows = 1; // Number of rows of header info (to skip)
var range = sheet.getDataRange();
var data = range.getValues();
var calId = "YOUR_CALENDAR_ID";
var cal = CalendarApp.getCalendarById(calId);
var i=0, nmbrOfRows = data.length,
row,
date,
title,
tstart,
tstop,
loc,
desc,
id;
for (i=0; i<nmbrOfRows; i++) {
if (i < headerRows) continue; // Skip header row(s)
row = data[i];
date = new Date(row[0]); // First column
title = row[1]; // Second column
tstart = new Date(row[2]);
tstart.setDate(date.getDate());
tstart.setMonth(date.getMonth());
tstart.setYear(date.getYear());
tstop = new Date(row[3]);
tstop.setDate(date.getDate());
tstop.setMonth(date.getMonth());
tstop.setYear(date.getYear());
loc = row[4];
desc = row[5];
id = row[6]; // Sixth column == eventId
// Check if event already exists, update it if it does
try {
var event = cal.getEventSeriesById(id);
}
catch (e) {
// do nothing - we just want to avoid the exception when event doesn't exist
}
if (!event) {
//cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00"), {description:desc,location:loc});
var newEvent = cal.createEvent(title, tstart, tstop, {description:desc,location:loc}).getId();
row[6] = newEvent; // Update the data array with event ID
}
else {
event.setTitle(title);
event.setDescription(desc);
event.setLocation(loc);
// event.setTime(tstart, tstop); // cannot setTime on eventSeries.
// ... but we CAN set recurrence!
var recurrence = CalendarApp.newRecurrence().addDailyRule().times(1);
event.setRecurrence(recurrence, tstart, tstop);
}
debugger;
}
//get just column 6 of new data
var outerArray = [];
var innerArray = [];
for (i=0;i<data.length;i+=1) {
if (i < headerRows) continue; // Skip header row(s)
innerArray = []; //Reset on every loop
innerArray.push(data[i][6]);
outerArray.push(innerArray);
};
// Record all event IDs to spreadsheet
sheet.getRange(headerRows+1,6,outerArray.length,1).setValues(outerArray);
}
函数exportEvents(){
var sheet=SpreadsheetApp.getActiveSheet();
var headerRows=1;//标题信息的行数(要跳过)
var range=sheet.getDataRange();
var data=range.getValues();
var calId=“您的日历ID”;
var cal=CalendarApp.getCalendarById(calId);
var i=0,nmbrOfRows=data.length,
一行
日期,
标题
启动,
tstop,
loc,
描述,
身份证件
对于(i=0;i我更改了底部的代码,只得到第六列:
function exportEvents() {
var sheet = SpreadsheetApp.getActiveSheet();
var headerRows = 1; // Number of rows of header info (to skip)
var range = sheet.getDataRange();
var data = range.getValues();
var calId = "YOUR_CALENDAR_ID";
var cal = CalendarApp.getCalendarById(calId);
var i=0, nmbrOfRows = data.length,
row,
date,
title,
tstart,
tstop,
loc,
desc,
id;
for (i=0; i<nmbrOfRows; i++) {
if (i < headerRows) continue; // Skip header row(s)
row = data[i];
date = new Date(row[0]); // First column
title = row[1]; // Second column
tstart = new Date(row[2]);
tstart.setDate(date.getDate());
tstart.setMonth(date.getMonth());
tstart.setYear(date.getYear());
tstop = new Date(row[3]);
tstop.setDate(date.getDate());
tstop.setMonth(date.getMonth());
tstop.setYear(date.getYear());
loc = row[4];
desc = row[5];
id = row[6]; // Sixth column == eventId
// Check if event already exists, update it if it does
try {
var event = cal.getEventSeriesById(id);
}
catch (e) {
// do nothing - we just want to avoid the exception when event doesn't exist
}
if (!event) {
//cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00"), {description:desc,location:loc});
var newEvent = cal.createEvent(title, tstart, tstop, {description:desc,location:loc}).getId();
row[6] = newEvent; // Update the data array with event ID
}
else {
event.setTitle(title);
event.setDescription(desc);
event.setLocation(loc);
// event.setTime(tstart, tstop); // cannot setTime on eventSeries.
// ... but we CAN set recurrence!
var recurrence = CalendarApp.newRecurrence().addDailyRule().times(1);
event.setRecurrence(recurrence, tstart, tstop);
}
debugger;
}
//get just column 6 of new data
var outerArray = [];
var innerArray = [];
for (i=0;i<data.length;i+=1) {
if (i < headerRows) continue; // Skip header row(s)
innerArray = []; //Reset on every loop
innerArray.push(data[i][6]);
outerArray.push(innerArray);
};
// Record all event IDs to spreadsheet
sheet.getRange(headerRows+1,6,outerArray.length,1).setValues(outerArray);
}
函数exportEvents(){
var sheet=SpreadsheetApp.getActiveSheet();
var headerRows=1;//标题信息的行数(要跳过)
var range=sheet.getDataRange();
var data=range.getValues();
var calId=“您的日历ID”;
var cal=CalendarApp.getCalendarById(calId);
var i=0,nmbrOfRows=data.length,
一行
日期,
标题
启动,
tstop,
loc,
描述,
身份证件
for(i=0;iThanks for the reply.我们现在已经用公式解决了问题。不幸的是,id不起作用。每个脚本都会创建一个新约会,即使它已经存在。在这里我找到了代码。[link]()我使用的变量是“检查事件是否已经存在,如果存在则删除它”感谢您的回复。我们现在已经用公式解决了问题。不幸的是,id不起作用。每个脚本都会创建一个新约会,即使它已经存在。在这里我找到了代码。[link]()我使用的变量是“检查事件是否已经存在,如果已经存在则删除它”