<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Maintaining a Google Calendar from a Google Spreadsheet, Reprise</title>
	<atom:link href="http://blog.ouseful.info/2010/03/07/maintaining-a-google-calendar-from-a-goole-spreadsheet-reprise/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ouseful.info/2010/03/07/maintaining-a-google-calendar-from-a-goole-spreadsheet-reprise/</link>
	<description>Trying to find useful things to do with emerging technologies in open education</description>
	<lastBuildDate>Tue, 21 May 2013 10:44:13 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Tony Hirst</title>
		<link>http://blog.ouseful.info/2010/03/07/maintaining-a-google-calendar-from-a-goole-spreadsheet-reprise/#comment-41851</link>
		<dc:creator><![CDATA[Tony Hirst]]></dc:creator>
		<pubDate>Sun, 12 May 2013 17:29:35 +0000</pubDate>
		<guid isPermaLink="false">http://ouseful.wordpress.com/?p=3008#comment-41851</guid>
		<description><![CDATA[@Gary - the updates only happen when you run the script actions. For auto-updates, you&#039;d need to tweak the script.]]></description>
		<content:encoded><![CDATA[<p>@Gary &#8211; the updates only happen when you run the script actions. For auto-updates, you&#8217;d need to tweak the script.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gary Mc Ginty (@garymcginty)</title>
		<link>http://blog.ouseful.info/2010/03/07/maintaining-a-google-calendar-from-a-goole-spreadsheet-reprise/#comment-41849</link>
		<dc:creator><![CDATA[Gary Mc Ginty (@garymcginty)]]></dc:creator>
		<pubDate>Sun, 12 May 2013 15:09:57 +0000</pubDate>
		<guid isPermaLink="false">http://ouseful.wordpress.com/?p=3008#comment-41849</guid>
		<description><![CDATA[We work on a spreadsheet where the details and dates change regularly. Will this script automatically update the google calendar with revised dates? Thanks in advance.]]></description>
		<content:encoded><![CDATA[<p>We work on a spreadsheet where the details and dates change regularly. Will this script automatically update the google calendar with revised dates? Thanks in advance.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Misti</title>
		<link>http://blog.ouseful.info/2010/03/07/maintaining-a-google-calendar-from-a-goole-spreadsheet-reprise/#comment-37752</link>
		<dc:creator><![CDATA[Misti]]></dc:creator>
		<pubDate>Tue, 02 Apr 2013 20:38:11 +0000</pubDate>
		<guid isPermaLink="false">http://ouseful.wordpress.com/?p=3008#comment-37752</guid>
		<description><![CDATA[This is a really excellent example, so first of all, Thanks!  I have been able to use it in multiple automated workflows using forms to trigger calendar entries and mail-merge emails.  My non-techie coworkers don&#039;t have to see any of the background spreadsheet to communicate with each other or keep me posted - it just works, and so they use it.  Instant gratification.

My question is, do you have any suggestions for a work-around when we all get transferred to the &quot;new and improved&quot; Google forms?  My understanding is that there will no longer be a way to enter numbers through a form (numbers get an automatic single quote inserted in front of them, thereby rendering them as text) in the new forms.  In order to make scripts like this work, a user would have to go into the spreadsheet, delete the single quote in front of the date field, and then run the script from the sheet for every single entry.  This kind of bypasses the whole point of the automation - it&#039;s a potential roadblock for keeping my coworkers engaged and adds a whole new workload for me.  Any ideas on a fix?]]></description>
		<content:encoded><![CDATA[<p>This is a really excellent example, so first of all, Thanks!  I have been able to use it in multiple automated workflows using forms to trigger calendar entries and mail-merge emails.  My non-techie coworkers don&#8217;t have to see any of the background spreadsheet to communicate with each other or keep me posted &#8211; it just works, and so they use it.  Instant gratification.</p>
<p>My question is, do you have any suggestions for a work-around when we all get transferred to the &#8220;new and improved&#8221; Google forms?  My understanding is that there will no longer be a way to enter numbers through a form (numbers get an automatic single quote inserted in front of them, thereby rendering them as text) in the new forms.  In order to make scripts like this work, a user would have to go into the spreadsheet, delete the single quote in front of the date field, and then run the script from the sheet for every single entry.  This kind of bypasses the whole point of the automation &#8211; it&#8217;s a potential roadblock for keeping my coworkers engaged and adds a whole new workload for me.  Any ideas on a fix?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: @_Trinsky</title>
		<link>http://blog.ouseful.info/2010/03/07/maintaining-a-google-calendar-from-a-goole-spreadsheet-reprise/#comment-27861</link>
		<dc:creator><![CDATA[@_Trinsky]]></dc:creator>
		<pubDate>Mon, 01 Oct 2012 22:56:36 +0000</pubDate>
		<guid isPermaLink="false">http://ouseful.wordpress.com/?p=3008#comment-27861</guid>
		<description><![CDATA[I assembled all the code together, but when I try to run it I receive a message wth a warning about there&#039;s no function to run...  Any idea why?    Here&#039;s the code (all var defined at the beginning):

//Inicia código para llamar calendarios
var cal_JALISCO = CalendarApp.getOwnedCalendarsByName(&quot;JALISCO&quot;);
var cal_MORELOS = CalendarApp.getOwnedCalendarsByName(&quot;MORELOS&quot;);
var cal_MEXICO = CalendarApp.getOwnedCalendarsByName(&quot;MEXICO&quot;);
//Termina código para llamar calendarios


// Inicia código para nombrar columnas
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=SpreadsheetApp.setActiveSheet(ss.getSheets()[0]); //need a routine to set active sheet by name?
//go defensive
var col_JALISCO, col_MEXICO, col_MORELOS=1;
var maxcols=sheet.getMaxColumns();
for (var j=1;j&lt;=maxcols;j++){
  var header= sheet.getRange(1, j, 1, 1).getValue();
  switch(header){
   case &quot;Added to Google&quot;:col_added=j-1;
   case &quot;JALISCO&quot;:col_JALISCO=j-1; break;
   case &quot;MORELOS&quot;:col_MORELOS=j-1; break;
   case &quot;MEXICO&quot;: col_MEXICO=j-1; break;
   case &quot;Subject&quot;: col_Subject=j-1; break;
   case &quot;Location&quot;: col_Location=j-1; break;
   case &quot;Start Date&quot;: col_Start=j-1; break;
   case &quot;End Date&quot;: col_End=j-1; break;
   case &quot;Description&quot;: col_Description=j-1; break;
   case &quot;Color&quot;: col_Color=j-1; break;
   default:
  }
}
//termina código para nombrar columnas

// Inicia código de actualización de calendarios
var startRow = 2;  // First row of data to process
var numRows = 10   // Number of rows to process
var dataRange = sheet.getRange(startRow, 1, numRows, 100);
var data = dataRange.getValues();

for (i in data) {
    var row = data[i];
    var title = row[col_Title];  // First column
    var desc = row[col_Description];       // Second column
    var added = row[col_added];
    var tstart = row[col_Start];
    var tstop = row[col_End];
    var loc = row[col_Location];
    var color = row [col_Color];
    var reminder = row [col_Reminder];
    var JALISCO=row[col_JALISCO]; // is this event one to &quot;Add&quot; to the broadcast calendar?
    var MORELOS=row[col_MORELOS]; // is this event one to &quot;Add&quot; to the itunes calendar? etc
    var MEXICO=row[col_MEXICO];
  if (added!=&quot;Added&quot;) { //the calendar(s) have not been updated for this event
    if (JALISCO==&quot;Add&quot;) {
      cal_JALISCO.createEvent(title, tstart,tstop, {description:desc}); //add the event to the &quot;broadcast&quot; calendar
      dataRange.getCell(parseInt(i)+1,col_JALISCO+1).setValue(&#039;Added&#039;); // Replace &quot;Add&quot; with &quot;Added&quot;; +1 is offset for sheet numbering
    }
    if (MORELOS==&quot;Add&quot;){
      cal_MORELOS.createEvent(title, tstart,tstop, {description:desc});
      dataRange.getCell(parseInt(i)+1,col_MORELOS+1).setValue(&#039;Added&#039;); // Replace &quot;Add&quot; with &quot;Added&quot;; +1 is offset for sheet numbering
    }
    if (MEXICO==&quot;Add&quot;){
      cal_MEXICO.createEvent(title, tstart,tstop, {description:desc});
      dataRange.getCell(parseInt(i)+1,col_MEXICO+1).setValue(&#039;Added&#039;); // Replace &quot;Add&quot; with &quot;Added&quot;; +1 is offset for sheet numbering
    }
    // etc for each channel
    var v = parseInt(i)+2; // +2 is an offset to do with the numbering of rows and the &quot;blank&quot; header row 0;
    sheet.getRange(v, 1, 1, 1).setValue(&quot;Added&quot;); //set the fact that we have updated the calendars for this event
  }
}
//termina código para actualización de calendarios]]></description>
		<content:encoded><![CDATA[<p>I assembled all the code together, but when I try to run it I receive a message wth a warning about there&#8217;s no function to run&#8230;  Any idea why?    Here&#8217;s the code (all var defined at the beginning):</p>
<p>//Inicia código para llamar calendarios<br />
var cal_JALISCO = CalendarApp.getOwnedCalendarsByName(&#8220;JALISCO&#8221;);<br />
var cal_MORELOS = CalendarApp.getOwnedCalendarsByName(&#8220;MORELOS&#8221;);<br />
var cal_MEXICO = CalendarApp.getOwnedCalendarsByName(&#8220;MEXICO&#8221;);<br />
//Termina código para llamar calendarios</p>
<p>// Inicia código para nombrar columnas<br />
var ss=SpreadsheetApp.getActiveSpreadsheet();<br />
var sheet=SpreadsheetApp.setActiveSheet(ss.getSheets()[0]); //need a routine to set active sheet by name?<br />
//go defensive<br />
var col_JALISCO, col_MEXICO, col_MORELOS=1;<br />
var maxcols=sheet.getMaxColumns();<br />
for (var j=1;j&lt;=maxcols;j++){<br />
  var header= sheet.getRange(1, j, 1, 1).getValue();<br />
  switch(header){<br />
   case &quot;Added to Google&quot;:col_added=j-1;<br />
   case &quot;JALISCO&quot;:col_JALISCO=j-1; break;<br />
   case &quot;MORELOS&quot;:col_MORELOS=j-1; break;<br />
   case &quot;MEXICO&quot;: col_MEXICO=j-1; break;<br />
   case &quot;Subject&quot;: col_Subject=j-1; break;<br />
   case &quot;Location&quot;: col_Location=j-1; break;<br />
   case &quot;Start Date&quot;: col_Start=j-1; break;<br />
   case &quot;End Date&quot;: col_End=j-1; break;<br />
   case &quot;Description&quot;: col_Description=j-1; break;<br />
   case &quot;Color&quot;: col_Color=j-1; break;<br />
   default:<br />
  }<br />
}<br />
//termina código para nombrar columnas</p>
<p>// Inicia código de actualización de calendarios<br />
var startRow = 2;  // First row of data to process<br />
var numRows = 10   // Number of rows to process<br />
var dataRange = sheet.getRange(startRow, 1, numRows, 100);<br />
var data = dataRange.getValues();</p>
<p>for (i in data) {<br />
    var row = data[i];<br />
    var title = row[col_Title];  // First column<br />
    var desc = row[col_Description];       // Second column<br />
    var added = row[col_added];<br />
    var tstart = row[col_Start];<br />
    var tstop = row[col_End];<br />
    var loc = row[col_Location];<br />
    var color = row [col_Color];<br />
    var reminder = row [col_Reminder];<br />
    var JALISCO=row[col_JALISCO]; // is this event one to &quot;Add&quot; to the broadcast calendar?<br />
    var MORELOS=row[col_MORELOS]; // is this event one to &quot;Add&quot; to the itunes calendar? etc<br />
    var MEXICO=row[col_MEXICO];<br />
  if (added!=&quot;Added&quot;) { //the calendar(s) have not been updated for this event<br />
    if (JALISCO==&quot;Add&quot;) {<br />
      cal_JALISCO.createEvent(title, tstart,tstop, {description:desc}); //add the event to the &quot;broadcast&quot; calendar<br />
      dataRange.getCell(parseInt(i)+1,col_JALISCO+1).setValue(&#039;Added&#039;); // Replace &quot;Add&quot; with &quot;Added&quot;; +1 is offset for sheet numbering<br />
    }<br />
    if (MORELOS==&quot;Add&quot;){<br />
      cal_MORELOS.createEvent(title, tstart,tstop, {description:desc});<br />
      dataRange.getCell(parseInt(i)+1,col_MORELOS+1).setValue(&#039;Added&#039;); // Replace &quot;Add&quot; with &quot;Added&quot;; +1 is offset for sheet numbering<br />
    }<br />
    if (MEXICO==&quot;Add&quot;){<br />
      cal_MEXICO.createEvent(title, tstart,tstop, {description:desc});<br />
      dataRange.getCell(parseInt(i)+1,col_MEXICO+1).setValue(&#039;Added&#039;); // Replace &quot;Add&quot; with &quot;Added&quot;; +1 is offset for sheet numbering<br />
    }<br />
    // etc for each channel<br />
    var v = parseInt(i)+2; // +2 is an offset to do with the numbering of rows and the &quot;blank&quot; header row 0;<br />
    sheet.getRange(v, 1, 1, 1).setValue(&quot;Added&quot;); //set the fact that we have updated the calendars for this event<br />
  }<br />
}<br />
//termina código para actualización de calendarios</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: @_Trinsky</title>
		<link>http://blog.ouseful.info/2010/03/07/maintaining-a-google-calendar-from-a-goole-spreadsheet-reprise/#comment-27855</link>
		<dc:creator><![CDATA[@_Trinsky]]></dc:creator>
		<pubDate>Mon, 01 Oct 2012 17:14:31 +0000</pubDate>
		<guid isPermaLink="false">http://ouseful.wordpress.com/?p=3008#comment-27855</guid>
		<description><![CDATA[Do you mean empty cells in a row with data?]]></description>
		<content:encoded><![CDATA[<p>Do you mean empty cells in a row with data?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: @_Trinsky</title>
		<link>http://blog.ouseful.info/2010/03/07/maintaining-a-google-calendar-from-a-goole-spreadsheet-reprise/#comment-27854</link>
		<dc:creator><![CDATA[@_Trinsky]]></dc:creator>
		<pubDate>Mon, 01 Oct 2012 15:48:24 +0000</pubDate>
		<guid isPermaLink="false">http://ouseful.wordpress.com/?p=3008#comment-27854</guid>
		<description><![CDATA[Tony, do you have some example files for a Code dummy as me????]]></description>
		<content:encoded><![CDATA[<p>Tony, do you have some example files for a Code dummy as me????</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: @_Trinsky</title>
		<link>http://blog.ouseful.info/2010/03/07/maintaining-a-google-calendar-from-a-goole-spreadsheet-reprise/#comment-27853</link>
		<dc:creator><![CDATA[@_Trinsky]]></dc:creator>
		<pubDate>Mon, 01 Oct 2012 15:30:09 +0000</pubDate>
		<guid isPermaLink="false">http://ouseful.wordpress.com/?p=3008#comment-27853</guid>
		<description><![CDATA[This may seem very stupid but...  Should I assemble all those code pieces into just big one or are those different scripts inside a single project?  Or are those different projects? (I guess this last one is not an option).

Sorry guys!  I&#039;m completely new to scripts; I&#039;m looking for a way to get my job done and I supposed the answer should be in here...]]></description>
		<content:encoded><![CDATA[<p>This may seem very stupid but&#8230;  Should I assemble all those code pieces into just big one or are those different scripts inside a single project?  Or are those different projects? (I guess this last one is not an option).</p>
<p>Sorry guys!  I&#8217;m completely new to scripts; I&#8217;m looking for a way to get my job done and I supposed the answer should be in here&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ebrahim Makda</title>
		<link>http://blog.ouseful.info/2010/03/07/maintaining-a-google-calendar-from-a-goole-spreadsheet-reprise/#comment-26959</link>
		<dc:creator><![CDATA[Ebrahim Makda]]></dc:creator>
		<pubDate>Sat, 01 Sep 2012 12:05:46 +0000</pubDate>
		<guid isPermaLink="false">http://ouseful.wordpress.com/?p=3008#comment-26959</guid>
		<description><![CDATA[actually, I can&#039;t seem to get getCalendarsByName but getCalendarsByid works e.g.

var cal = CalendarApp.getCalendarById(&quot;ebrahim.makda@gmail.com&quot;);

Can anyone currently get openbyname or getcalendersbyname to work?]]></description>
		<content:encoded><![CDATA[<p>actually, I can&#8217;t seem to get getCalendarsByName but getCalendarsByid works e.g.</p>
<p>var cal = CalendarApp.getCalendarById(&#8220;ebrahim.makda@gmail.com&#8221;);</p>
<p>Can anyone currently get openbyname or getcalendersbyname to work?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ebrahim Makda</title>
		<link>http://blog.ouseful.info/2010/03/07/maintaining-a-google-calendar-from-a-goole-spreadsheet-reprise/#comment-26950</link>
		<dc:creator><![CDATA[Ebrahim Makda]]></dc:creator>
		<pubDate>Sat, 01 Sep 2012 11:26:02 +0000</pubDate>
		<guid isPermaLink="false">http://ouseful.wordpress.com/?p=3008#comment-26950</guid>
		<description><![CDATA[I could not find the openByName function for the CalenderApp object
so I had to change 
CalendarApp.openByName(&quot;broadcastDemo&quot;);

to
CalendarApp.getCalendarsByName(&quot;broadcastDemo&quot;);

to make it work]]></description>
		<content:encoded><![CDATA[<p>I could not find the openByName function for the CalenderApp object<br />
so I had to change<br />
CalendarApp.openByName(&#8220;broadcastDemo&#8221;);</p>
<p>to<br />
CalendarApp.getCalendarsByName(&#8220;broadcastDemo&#8221;);</p>
<p>to make it work</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kannadasan</title>
		<link>http://blog.ouseful.info/2010/03/07/maintaining-a-google-calendar-from-a-goole-spreadsheet-reprise/#comment-23364</link>
		<dc:creator><![CDATA[Kannadasan]]></dc:creator>
		<pubDate>Wed, 04 Jul 2012 07:34:35 +0000</pubDate>
		<guid isPermaLink="false">http://ouseful.wordpress.com/?p=3008#comment-23364</guid>
		<description><![CDATA[Hi

I want to change the status to &quot;Add&quot; if i edit any column in a row. Is it possible.]]></description>
		<content:encoded><![CDATA[<p>Hi</p>
<p>I want to change the status to &#8220;Add&#8221; if i edit any column in a row. Is it possible.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
