<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jellybend</title>
	<atom:link href="http://www.jellybend.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jellybend.com</link>
	<description>One stop shop for Google Apps Script</description>
	<lastBuildDate>Thu, 24 Jan 2013 10:59:13 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Using the Check Box component of the Google Apps Script GUI Builder</title>
		<link>http://www.jellybend.com/2013/01/24/using-the-check-box-component-of-the-google-apps-script-gui-builder/</link>
		<comments>http://www.jellybend.com/2013/01/24/using-the-check-box-component-of-the-google-apps-script-gui-builder/#comments</comments>
		<pubDate>Thu, 24 Jan 2013 10:59:13 +0000</pubDate>
		<dc:creator>Marcello Scacchetti</dc:creator>
				<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[GUI Builder]]></category>
		<category><![CDATA[check box]]></category>
		<category><![CDATA[google app]]></category>
		<category><![CDATA[gui builder]]></category>

		<guid isPermaLink="false">http://www.jellybend.com/?p=266</guid>
		<description><![CDATA[After the recent post Using the List Box component of the Google Apps Script GUI Builder some people asked this time, how to manage a Check Box component inside the GUI Builder. In this post I&#8217;ll try explain how to handle Check Box<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://www.jellybend.com/2013/01/24/using-the-check-box-component-of-the-google-apps-script-gui-builder/">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
				<content:encoded><![CDATA[<p>After the recent post <a title="Using the List Box component of the Google Apps Script GUI Builder" href="http://www.jellybend.com/2013/01/21/using-the-list-box-component-of-the-google-apps-script-gui-builder/">Using the List Box component of the Google Apps Script GUI Builder </a>some people asked this time, how to manage a Check Box component inside the GUI Builder.<br />
In this post I&#8217;ll try explain how to handle Check Box component created inside the GUI Builder by using Google Apps Script.<br />
The first thing to do is to load the GUI Builder, for simplicity I&#8217;ll use the one created in the previous post: <a title="Using the List Box component of the Google Apps Script GUI Builder" href="http://www.jellybend.com/2013/01/21/using-the-list-box-component-of-the-google-apps-script-gui-builder/">Using the List Box component of the Google Apps Script GUI Builder</a>:</p>
<p><img class="aligncenter size-full wp-image-267" alt="Using the Check Box component with the GUI Builder 1" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-Check-Box-component-with-the-GUI-Builder-1.png" width="526" height="425" /></p>
<p>Select the Label component from the lest bar:</p>
<p><img class="aligncenter size-full wp-image-268" alt="Using the Check Box component with the GUI Builder 2" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-Check-Box-component-with-the-GUI-Builder-2.png" width="143" height="113" /></p>
<p>Drop the Label component inside the Absolute Panel of the Form Panel:</p>
<p><img class="aligncenter size-full wp-image-269" alt="Using the Check Box component with the GUI Builder 3" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-Check-Box-component-with-the-GUI-Builder-3.png" width="521" height="420" /></p>
<p>Using the right bar change the Label text to: &#8220;Driving License?&#8221;:</p>
<p><img class="aligncenter size-full wp-image-270" alt="Using the Check Box component with the GUI Builder 4" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-Check-Box-component-with-the-GUI-Builder-4.png" width="219" height="157" /></p>
<p>Now select the Check Box component from the left bar:</p>
<p><img class="aligncenter size-full wp-image-271" alt="Using the Check Box component with the GUI Builder 5" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-Check-Box-component-with-the-GUI-Builder-5.png" width="145" height="116" /></p>
<p>Drop the Check Box component inside the Absolute Panel of the Form Panel next to the newly created &#8220;Driving License?&#8221; Label:</p>
<p><img class="aligncenter size-full wp-image-272" alt="Using the Check Box component with the GUI Builder 6" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-Check-Box-component-with-the-GUI-Builder-6.png" width="523" height="419" /></p>
<p>Using the right bar change the Text of the Check Box component to: &#8220;&#8221;:</p>
<p><img class="aligncenter size-full wp-image-273" alt="Using the Check Box component with the GUI Builder 7" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-Check-Box-component-with-the-GUI-Builder-7.png" width="207" height="145" /></p>
<p>Always using the right bar change the Name of the Check Box component to: &#8220;CheckBox1&#8243;:</p>
<p><img class="aligncenter size-full wp-image-276" alt="Using the Check Box component with the GUI Builder 10" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-Check-Box-component-with-the-GUI-Builder-10.png" width="198" height="178" /></p>
<p>Now we have to remove the border of the Check Box component, to do so, using the right bar, set the &#8220;Border Width&#8221; to 0:</p>
<p><img class="aligncenter size-full wp-image-275" alt="Using the Check Box component with the GUI Builder 9" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-Check-Box-component-with-the-GUI-Builder-9.png" width="200" height="182" /></p>
<p>The updated application should look like the following:</p>
<p><img class="aligncenter size-full wp-image-274" alt="Using the Check Box component with the GUI Builder 8" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-Check-Box-component-with-the-GUI-Builder-8.png" width="529" height="425" /></p>
<p>You can now save the interface and return to the Script Editor. Replace the doPost function with the following code:</p>
<pre class="brush: javascript; gutter: false; toolbar: false">function doPost(theForm) {
  var app = UiApp.getActiveApplication();
  var userFullName = theForm.parameter.userFullName;
  var userGender = theForm.parameter.genderListBox;

  // Handle the Check Box
  if(theForm.parameter.CheckBox1 != undefined) {
    var drivingLicense = &quot;Has driving license&quot;;
  } else {
    var drivingLicense = &quot;No driving license&quot;;
  }

  SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().appendRow([userFullName,userGender,drivingLicense]);
  app.close();
  return app;
}</pre>
<p>You can see that the status of the Check Box component is checked using the theForm.parameter.CheckBox1 variable. If the user didn&#8217;t checked the check box no parameter or variable is passed to us, so we first check if the the theForm.parameter.CheckBox1 is &#8220;undefined&#8221;. If the variable is defined means that the user has checked the check box. Using this way you can act based on the checked status of the Check Box component. Now run the function myFunction and go back to the Spreadsheet document:</p>
<p><img class="aligncenter size-full wp-image-277" alt="Using the Check Box component with the GUI Builder 11" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-Check-Box-component-with-the-GUI-Builder-11.png" width="598" height="392" /></p>
<p>Insert &#8220;John&#8221; as Full Name and click the &#8220;Submit&#8221; button:</p>
<p><img class="aligncenter size-full wp-image-278" alt="Using the Check Box component with the GUI Builder 12" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-Check-Box-component-with-the-GUI-Builder-12.png" width="409" height="129" /></p>
<p>As you can see by not checking the &#8220;Driving License?&#8221; check box the data saved corresponding to the entry is &#8220;No driving license&#8221;. Now run again the function myFunction:</p>
<p><img class="aligncenter size-full wp-image-279" alt="Using the Check Box component with the GUI Builder 13" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-Check-Box-component-with-the-GUI-Builder-13.png" width="595" height="391" /></p>
<p>This time use &#8220;Jane&#8221; as Full Name, select &#8220;Female&#8221; as Gender and check the &#8220;Driving License&#8221; check box and click the &#8220;Submit&#8221; button:</p>
<p><img class="aligncenter size-full wp-image-280" alt="Using the Check Box component with the GUI Builder 14" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-Check-Box-component-with-the-GUI-Builder-14.png" width="410" height="145" /></p>
<p>Now the value &#8220;Has driving license&#8221; is stored for Jane.</p>
<p>I hope this post will give you a quick way to handle check boxes in your applications.</p>
<p>Happy Scripting!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellybend.com/2013/01/24/using-the-check-box-component-of-the-google-apps-script-gui-builder/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Using the List Box component of the Google Apps Script GUI Builder</title>
		<link>http://www.jellybend.com/2013/01/21/using-the-list-box-component-of-the-google-apps-script-gui-builder/</link>
		<comments>http://www.jellybend.com/2013/01/21/using-the-list-box-component-of-the-google-apps-script-gui-builder/#comments</comments>
		<pubDate>Mon, 21 Jan 2013 13:06:35 +0000</pubDate>
		<dc:creator>Marcello Scacchetti</dc:creator>
				<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[GUI Builder]]></category>
		<category><![CDATA[google apps script]]></category>
		<category><![CDATA[gui builder]]></category>
		<category><![CDATA[list box]]></category>

		<guid isPermaLink="false">http://www.jellybend.com/?p=252</guid>
		<description><![CDATA[After the recent post Create custom forms with GUI Builder and Google Apps Script some people asked how to manage a List Box component inside the GUI Builder. Unfortunately GUI Builder doesn&#8217;t allow you to visually add items to a List Box component.<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://www.jellybend.com/2013/01/21/using-the-list-box-component-of-the-google-apps-script-gui-builder/">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
				<content:encoded><![CDATA[<p>After the recent post <a title="Create custom forms with GUI Builder and Google Apps Script" href="http://www.jellybend.com/2013/01/15/create-custom-forms-with-gui-builder-and-google-apps-script/">Create custom forms with GUI Builder and Google Apps Script</a> some people asked how to manage a List Box component inside the GUI Builder. Unfortunately GUI Builder doesn&#8217;t allow you to visually add items to a List Box component.<br />
In this post I&#8217;ll try explain how to manually populate a List Box component created inside the GUI Builder by using Google Apps Script.<br />
The first thing to do is to load the GUI Builder, for simplicity I&#8217;ll use the one created in the previous post: <a title="Create custom forms with GUI Builder and Google Apps Script" href="http://www.jellybend.com/2013/01/15/create-custom-forms-with-gui-builder-and-google-apps-script/">Create custom forms with GUI Builder and Google Apps Script</a>:</p>
<p><img class="aligncenter size-full wp-image-263" alt="Using the List Box component with the GUI Builder 11" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-List-Box-component-with-the-GUI-Builder-11.png" width="523" height="421" /></p>
<p>Select the Label component from the lest bar:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-253" alt="Using the List Box component with the GUI Builder 2" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-List-Box-component-with-the-GUI-Builder-1.png" width="155" height="131" /></p>
<p>Drop the Label component inside the Absolute Panel of the Form Panel:</p>
<p><img class="aligncenter size-full wp-image-254" alt="Using the List Box component with the GUI Builder 2" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-List-Box-component-with-the-GUI-Builder-2.png" width="528" height="431" /></p>
<p>Using the right bar change the Label text to: &#8220;Gender:&#8221;:</p>
<p><img class="aligncenter size-full wp-image-255" alt="Using the List Box component with the GUI Builder 3" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-List-Box-component-with-the-GUI-Builder-3.png" width="213" height="152" /></p>
<p>Now select the List Box component from the left bar:</p>
<p><img class="aligncenter size-full wp-image-256" alt="Using the List Box component with the GUI Builder 4" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-List-Box-component-with-the-GUI-Builder-4.png" width="146" height="105" /></p>
<p>Drop the List Box component inside the Absolute Panel of the Form Panel next to the newly created &#8220;Gender:&#8221; Label:</p>
<p><img class="aligncenter size-full wp-image-257" alt="Using the List Box component with the GUI Builder 5" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-List-Box-component-with-the-GUI-Builder-5.png" width="536" height="433" /></p>
<p>Using the right bar change the ID and the Name of the List Box component to: &#8220;genderListBox&#8221;:</p>
<p><img class="aligncenter size-full wp-image-258" alt="Using the List Box component with the GUI Builder 6" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-List-Box-component-with-the-GUI-Builder-6.png" width="212" height="359" /></p>
<p>You can now save the interface and return to the Script Editor. Our List Box will be by default empty. To populate it we have to manually add the items needed. Replace the myFunction function with the following code:</p>
<pre class="brush: javascript; gutter: false; toolbar: false">function myFunction() {
  var app = UiApp.createApplication();
  app.add(app.loadComponent(&quot;My Custom Form&quot;));

  // Populate the List Box
  var genderListBox = app.getElementById(&#039;genderListBox&#039;);
  genderListBox.addItem(&#039;Male&#039;);
  genderListBox.addItem(&#039;Female&#039;);

  SpreadsheetApp.getActiveSpreadsheet().show(app);
}</pre>
<p>As you can see to populate the List Box we have to load the component using the getElementById method, from there on we can simply reference the component by using the variable genderListBox. Adding items to the the List Box is just the matter of using the addItem method and passing as parameter the name of the item to add, in this case &#8220;Male&#8221; and &#8220;Female&#8221;. Run now the myFunction function. You should see inside the Spreadsheet document the new interface including the List Box component:</p>
<p><img class="aligncenter size-full wp-image-260" alt="Using the List Box component with the GUI Builder 8" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-List-Box-component-with-the-GUI-Builder-8.png" width="600" height="396" /></p>
<p>The only thing missing right now is the ability to save the List Box selection to the Spreadsheet document. To do this just replace the doPost function with the following code:</p>
<pre class="brush: javascript; gutter: false; toolbar: false">function doPost(theForm) {
  Logger.log(theForm);
  var app = UiApp.getActiveApplication();
  var userFullName = theForm.parameter.userFullName;
  var userGender = theForm.parameter.genderListBox;
  SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().appendRow([userFullName,userGender]);
  app.close();
  return app;
}</pre>
<p>As you can see the selected value is passed by the form and we can reference it by genderListBox parameter, that if you recall is the ID associated to the List Box component. Now run again the myFunction to load the interface and fill it with some sample values and hit the &#8220;Submit&#8221; button:</p>
<p><img class="aligncenter size-full wp-image-261" alt="Using the List Box component with the GUI Builder 9" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-List-Box-component-with-the-GUI-Builder-9.png" width="600" height="397" /></p>
<p>If everything is working you should see the Spreadsheet document being populated also by the selected List Box item&#8217;s value:</p>
<p><img class="aligncenter size-full wp-image-262" alt="Using the List Box component with the GUI Builder 10" src="http://www.jellybend.com/wp-content/uploads/2013/01/Using-the-List-Box-component-with-the-GUI-Builder-10.png" width="393" height="185" /></p>
<p>If you need additional information or you think that some topics deserve attention, just reply to this post all ideas are welcome!</p>
<p>Happy scripting!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellybend.com/2013/01/21/using-the-list-box-component-of-the-google-apps-script-gui-builder/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Create custom forms with GUI Builder and Google Apps Script</title>
		<link>http://www.jellybend.com/2013/01/15/create-custom-forms-with-gui-builder-and-google-apps-script/</link>
		<comments>http://www.jellybend.com/2013/01/15/create-custom-forms-with-gui-builder-and-google-apps-script/#comments</comments>
		<pubDate>Tue, 15 Jan 2013 15:20:24 +0000</pubDate>
		<dc:creator>Marcello Scacchetti</dc:creator>
				<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[GUI Builder]]></category>
		<category><![CDATA[Spreadsheet]]></category>
		<category><![CDATA[custom forms]]></category>
		<category><![CDATA[google apps script]]></category>
		<category><![CDATA[google spreadsheet]]></category>
		<category><![CDATA[gui builder]]></category>

		<guid isPermaLink="false">http://www.jellybend.com/?p=212</guid>
		<description><![CDATA[Using Google Forms, you can create custom data form, but the ability to customize them both in terms of functionality and visual aspect can, in some cases, be limiting. In this post I will explain how you can create a<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://www.jellybend.com/2013/01/15/create-custom-forms-with-gui-builder-and-google-apps-script/">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
				<content:encoded><![CDATA[<p>Using Google Forms, you can create custom data form, but the ability to customize them both in terms of functionality and visual aspect can, in some cases, be limiting. In this post I will explain how you can create a custom data form to record entered data in a Google Spreadsheet document using Google Apps Script.<br />
Google Apps Script provides a simple tool for visual graphical user interfaces creation named GUI Builder that we will employ to create our custom form.<br />
First create a new Spreadsheet document, then activate the Script Editor using the menu &#8220;Tools -&gt; Script editor &#8230;&#8221;:</p>
<p><img class="aligncenter size-full wp-image-213" alt="Create custom forms with GUI Builder and Google Apps Script 1" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-1.png" width="602" height="477" /></p>
<p>Select &#8220;Blank Project&#8221; to create an empty script project and save that by using the menu item: &#8220;File -&gt; Save&#8221;.</p>
<p><img class="aligncenter size-full wp-image-214" alt="Create custom forms with GUI Builder and Google Apps Script 2" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-2.png" width="432" height="475" /></p>
<p>The editor will ask you to name the project, insert: “Custom Form to Spreadsheet” and click on the “OK” button to confirm.</p>
<p><img class="aligncenter size-full wp-image-215" alt="Create custom forms with GUI Builder and Google Apps Script 3" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-3.png" width="460" height="184" /></p>
<p>Once you assign a name to the project, you can use the GUI Builder to create our own custom interface. To access the GUI Builder tool you need to use the menu item &#8220;File -&gt; Build a user interface &#8230;&#8221;</p>
<p><img class="aligncenter size-full wp-image-216" alt="Create custom forms with GUI Builder and Google Apps Script 4" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-4.png" width="429" height="468" /></p>
<p>The GUI Builder tool will load as follows:</p>
<p><img class="aligncenter size-full wp-image-250" alt="Create custom forms with GUI Builder and Google Apps Script 5" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-5.png" width="895" height="520" /></p>
<p>The GUI Builder is composed by three main areas, the left bar contains components or items to be used inside your application, the right bar contains properties for the used components and the application preview area presents you a preview of your application. It’s possible to interact with this preview and edit it. Having to create a data form we must first select the &#8220;Form Panel&#8221; item from the the left bar:</p>
<p><img class="aligncenter size-full wp-image-217" alt="Create custom forms with GUI Builder and Google Apps Script 6" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-6.png" width="402" height="325" /></p>
<p>Using the mouse, drag the “Form Panel” item and drop it inside the application area:</p>
<p><img class="aligncenter size-full wp-image-218" alt="Create custom forms with GUI Builder and Google Apps Script 7" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-7.png" width="541" height="433" /></p>
<p>At this point, we can expand the Forms Panel item to consume most of the available space in our application. Widen it by dragging the active points (blue squares) to the desired position. We should get something like the following:</p>
<p><img class="aligncenter size-full wp-image-219" alt="Create custom forms with GUI Builder and Google Apps Script 8" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-8.png" width="524" height="427" /></p>
<p>Once created our Form Panel, we can begin putting fields in the form. However as conceived by Google, the Form Panel component accepts only one child component, obviously our form can&#8217;t be composed of only one field.<br />
The explanation is simple, in our form we have to insert a container component that represents the alignment of child components. In this case we will use the &#8220;Absolute Panel&#8221; as alignment panel, this panel allows us to insert components inside it which will be placed in an absolute manner or in the exact position in which we place them. To insert the Absolute Panel select it from the left bar:</p>
<p><img class="aligncenter size-full wp-image-220" alt="Create custom forms with GUI Builder and Google Apps Script 9" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-9.png" width="206" height="245" /></p>
<p>Like before, using the mouse, drag the “Absolute Panel” item and drop it inside the “Form Panel” component:</p>
<p><img class="aligncenter size-full wp-image-221" alt="Create custom forms with GUI Builder and Google Apps Script 10" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-10.png" width="530" height="428" /></p>
<p>Use the active points to broaden the component to occupy the greatest possible proportion of the space offered by the Form Panel:</p>
<p><img class="aligncenter size-full wp-image-222" alt="Create custom forms with GUI Builder and Google Apps Script 11" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-11.png" width="525" height="424" /></p>
<p>Finally, we can place the components or fields of our form. We start by inserting a label selecting the “Label” component from the left bar:</p>
<p><img class="aligncenter size-full wp-image-223" alt="Create custom forms with GUI Builder and Google Apps Script 12" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-12.png" width="207" height="148" /></p>
<p>The Label component has to be dragged inside the &#8221;Absolute Panel” in the desired position, try to place it in the upper left corner:</p>
<p><img class="aligncenter size-full wp-image-224" alt="Create custom forms with GUI Builder and Google Apps Script 13" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-13.png" width="526" height="428" /></p>
<p>By default, the system will assign the text &#8220;Label1&#8243; to our component. Obviously, for us, this name is not correct so we can change it using the right bar by entering the desired text in the &#8220;Text&#8221; field of the “Text” section:</p>
<p><img class="aligncenter size-full wp-image-225" alt="Create custom forms with GUI Builder and Google Apps Script 14" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-14.png" width="238" height="272" /></p>
<p>At this point our label should display correctly the words: &#8220;Full Name:&#8221;. We must now place a component that allows us to enter a value for the label &#8220;Full Name&#8221;. To do this, select the component &#8220;Text Box&#8221; from the left bar:</p>
<p><img class="aligncenter size-full wp-image-226" alt="Create custom forms with GUI Builder and Google Apps Script 15" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-15.png" width="185" height="132" /></p>
<p>This component will have to be dragged to the right of the label inside the Absolute Panel:</p>
<p><img class="aligncenter size-full wp-image-227" alt="Create custom forms with GUI Builder and Google Apps Script 16" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-16.png" width="528" height="426" /></p>
<p>Still using active points broaden the component &#8220;Text Box&#8221;:</p>
<p><img class="aligncenter size-full wp-image-228" alt="Create custom forms with GUI Builder and Google Apps Script 17" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-17.png" width="526" height="428" /></p>
<p>By default, the system will insert &#8220;TextBox1&#8243; as text, actually we want the field to be initially empty and then allow the user to enter their name. To do this we use, as before, the right bar and clear the &#8220;TextBox1&#8243; value contained within the &#8220;Text&#8221; field of the &#8220;Text&#8221; section:</p>
<p><img class="aligncenter size-full wp-image-229" alt="Create custom forms with GUI Builder and Google Apps Script 18" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-18.png" width="210" height="201" /></p>
<p>To allow the user to send the form we have to insert a button. Select the component &#8220;Submit Button&#8221; from the left bar:</p>
<p><img class="aligncenter size-full wp-image-230" alt="Create custom forms with GUI Builder and Google Apps Script 19" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-19.png" width="174" height="140" /></p>
<p>Drag it into the Absolute Panel at the bottom left:</p>
<p><img class="aligncenter size-full wp-image-231" alt="Create custom forms with GUI Builder and Google Apps Script 20" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-20.png" width="520" height="423" /></p>
<p>By default, the button will be named &#8220;SubmitButton1&#8243; to change it use the right bar at the &#8220;Text&#8221; field of the &#8220;Text&#8221; section and insert the value &#8220;Submit&#8221;:</p>
<p><img class="aligncenter size-full wp-image-232" alt="Create custom forms with GUI Builder and Google Apps Script 21" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-21.png" width="208" height="173" /></p>
<p>Now we lack a button to allow the user to clear the form, the component to be used is called &#8220;Reset Button&#8221;. Select &#8220;Reset Button&#8221; at the left bar:</p>
<p><img class="aligncenter size-full wp-image-233" alt="Create custom forms with GUI Builder and Google Apps Script 22" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-22.png" width="182" height="136" /></p>
<p>Drag the component into the Absolute Panel next to the &#8220;Submit&#8221; button:</p>
<p><img class="aligncenter size-full wp-image-234" alt="Create custom forms with GUI Builder and Google Apps Script 23" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-23.png" width="524" height="421" /></p>
<p>In this case, the button name is by default &#8220;ResetButton1&#8243;, change it by selecting the &#8220;Text&#8221; field of the section &#8220;Text&#8221; of the right bar and insert the value &#8220;Clear&#8221;:</p>
<p><img class="aligncenter size-full wp-image-235" alt="Create custom forms with GUI Builder and Google Apps Script 24" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-24.png" width="213" height="133" /></p>
<p>In order to handle the incoming data simply, assign a friendly name to the component &#8220;Text Box&#8221;. To do so, we must first select it:</p>
<p><img class="aligncenter size-full wp-image-237" alt="Create custom forms with GUI Builder and Google Apps Script 25" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-25-1.png" width="523" height="422" /></p>
<p>At this point, using the right bar, inside the field &#8220;ID&#8221; of the &#8220;Base&#8221; section insert the value &#8220;userFullName&#8221;:</p>
<p><img class="aligncenter size-full wp-image-236" alt="Create custom forms with GUI Builder and Google Apps Script 25" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-25.png" width="213" height="267" /></p>
<p>The “userFullName” has to be also inserted inside the field “Name” of the “Input Fields” section:</p>
<p><img class="aligncenter size-full wp-image-238" alt="Create custom forms with GUI Builder and Google Apps Script 27" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-27.png" width="208" height="183" /></p>
<p>Save our newly created interface by using the menu item “File -&gt; Save”:</p>
<p><img class="aligncenter size-full wp-image-239" alt="Create custom forms with GUI Builder and Google Apps Script 28" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-28.png" width="204" height="226" /></p>
<p>The GUI Builder will ask you to name the project, insert: “My Custom Form” and click on the “OK” button to confirm.</p>
<p><img class="aligncenter size-full wp-image-240" alt="Create custom forms with GUI Builder and Google Apps Script 29" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-29.png" width="450" height="151" /></p>
<p>You can now return to the Script Editor to load the GUI Builder project into your application. Inside the script, enter the following code:</p>
<pre class="brush: javascript; gutter: false; toolbar: false">function myFunction() {
  var app = UiApp.createApplication();
  app.add(app.loadComponent(&quot;My Custom Form&quot;));
  SpreadsheetApp.getActiveSpreadsheet().show(app);
}</pre>
<p>Now press the “play” button on the toolbar to start your script. Go back to the original Spreadsheet document, if all went well you should see the following screen:</p>
<p><img class="aligncenter size-full wp-image-241" alt="Create custom forms with GUI Builder and Google Apps Script 30" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-30.png" width="673" height="443" /></p>
<p>As you can see our form has (intentionally) some cosmetic defects such as edges and the size is not appropriate. In order to solve these problems go back in the GUI Builder using the menu &#8220;File -&gt; Build a user interface &#8230;&#8221; of the Script Editor. After loading our interface using the mouse select the Form Panel:</p>
<p><img class="aligncenter size-full wp-image-242" alt="Create custom forms with GUI Builder and Google Apps Script 31" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-31.png" width="527" height="422" /></p>
<p>Using the right bar under &#8220;Border Width&#8221; field of the &#8220;Borders and Margins&#8221; section, insert the value 0:</p>
<p><img class="aligncenter size-full wp-image-243" alt="Create custom forms with GUI Builder and Google Apps Script 32" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-32.png" width="223" height="192" /></p>
<p>As you can see the edges of the Form Panel are gone:</p>
<p><img class="aligncenter size-full wp-image-244" alt="Create custom forms with GUI Builder and Google Apps Script 33" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-33.png" width="533" height="426" /></p>
<p>Repeat the same operation for the Absolute Panel, select it:</p>
<p><img class="aligncenter size-full wp-image-245" alt="Create custom forms with GUI Builder and Google Apps Script 34" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-34.png" width="526" height="422" /></p>
<p>Always using the right bar under &#8220;Border Width&#8221; field of the &#8220;Borders and Margins&#8221; section, insert the value 0:</p>
<p><img class="aligncenter size-full wp-image-246" alt="Create custom forms with GUI Builder and Google Apps Script 35" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-35.png" width="213" height="162" /></p>
<p>At this point the edges for the Absolute Panel are gone. Let&#8217;s save our project via the menu &#8220;File -&gt; Save&#8221; and execute our script as we did previously. At this point in the Spreadsheet document should look like the following screen:</p>
<p><img class="aligncenter size-full wp-image-247" alt="Create custom forms with GUI Builder and Google Apps Script 36" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-36.png" width="610" height="403" /></p>
<p>Much better. Now the real engine of the form or the ability to record the data entered by the user is missing. For this reason, go back to the Script Editor and insert the following code:</p>
<pre class="brush: javascript; gutter: false; toolbar: false">function doPost(theForm) {
  var app = UiApp.getActiveApplication();
  var userFullName = theForm.parameter.userFullName;
  SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().appendRow([userFullName]);
  app.close();
  return app;
}</pre>
<p>Everything is ready to receive and record data. We run our script again and return to Spreadsheet document to display the form. Insert the value &#8220;Sample Name&#8221; in the field &#8220;Full Name&#8221;:</p>
<p><img class="aligncenter size-full wp-image-248" alt="Create custom forms with GUI Builder and Google Apps Script 37" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-37.png" width="585" height="381" /></p>
<p>Press now the &#8220;Submit&#8221; button to save the form data. As you can see the Spreadsheet document will be correctly populated with values:</p>
<p><img class="aligncenter size-full wp-image-249" alt="Create custom forms with GUI Builder and Google Apps Script 38" src="http://www.jellybend.com/wp-content/uploads/2013/01/Create-custom-forms-with-GUI-Builder-and-Google-Apps-Script-38.png" width="677" height="224" /></p>
<p>Congratulations! You have created ​​your first custom form using Google Apps Script and his GUI Builder.<br />
Of course there is much to say about creating forms with GUI Builder and Google Apps Script, this is just a starting point from where to build on.</p>
<p>Happy scripting!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellybend.com/2013/01/15/create-custom-forms-with-gui-builder-and-google-apps-script/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Sales Tracking for Google Spreadsheet using Google Apps Script</title>
		<link>http://www.jellybend.com/2013/01/14/sales-tracking-for-google-spreadsheet-using-google-apps-script/</link>
		<comments>http://www.jellybend.com/2013/01/14/sales-tracking-for-google-spreadsheet-using-google-apps-script/#comments</comments>
		<pubDate>Mon, 14 Jan 2013 18:03:07 +0000</pubDate>
		<dc:creator>Brennan Morrow</dc:creator>
				<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[Spreadsheet]]></category>
		<category><![CDATA[google apps script]]></category>
		<category><![CDATA[google spreadsheet]]></category>

		<guid isPermaLink="false">http://www.jellybend.com/?p=202</guid>
		<description><![CDATA[Editor’s Note: Guest author Brennan Morrow runs Solar Light, a Solatube Premier Dealer based in Oregon, United States. &#8212; Marcello Scacchetti Sales Tracking for Google Spreadsheets is a simple CRM solution developed specifically for small businesses who want to track<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://www.jellybend.com/2013/01/14/sales-tracking-for-google-spreadsheet-using-google-apps-script/">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
				<content:encoded><![CDATA[<p><em>Editor’s Note: Guest author Brennan Morrow runs <a title="Solar Light" href="http://solarlightingbend.com/">Solar Light</a>, a Solatube Premier Dealer based in Oregon, United States. &#8212; Marcello Scacchetti</em></p>
<p>Sales Tracking for Google Spreadsheets is a simple CRM solution developed specifically for small businesses who want to track the sales process and have return of investment data informations regarding marketing activities.</p>
<p><strong>The problem:</strong><br />
This Google Spreadsheet was developed, as we could not find a CRM that met our simple needs. We found the use of many of these existing CRM’s took too much time entering the information, and often, we had to enter it multiple times. And yet no CRM I could find that was simple, allowed for the calculation of marketing ROI. For our business we did not need leads, opportunities, customers, archive, etc. We only had one field: PEOPLE. For our product, it’s people that buy it. We are a home service based business in Oregon.<br />
This is a primary activity for any sales tracking, because it empowers the manager to visually see what is working and what is not. It turns the process of marketing from gambling at the casinos, to a controlled measurable equation of counting the cards. In my situation it allowed me to be have higher sales with a 7% marketing budget, rather than a 15% marketing budget. This was an enormous change in our profit. Further, this sheet influences how we interact with our customers. Also constantly evolving our system with, what is working in marketing and leads follow up each new entry.</p>
<p>This spreadsheet achieves:</p>
<ul>
<li><strong>Simple salesperson interface</strong> using a Google Form with the intention of sales scripting.</li>
<li><strong>Calculation of marketing ROI</strong> both for all dates, and monthly dates</li>
<li><strong>Sales Follow-up:</strong> Notifying the salesperson of follow-up activity and communications. (using Future Reminders script)</li>
</ul>
<p><strong>Nuts and Bolts:</strong><br />
The spreadsheet is composed by five sheets and a Google Form and an adaptive script called Future Reminders.</p>
<p><strong>Sheets:</strong></p>
<ul>
<li><strong>Names:</strong> this sheet contains all the current and past sales activities or leads, this is where all statistics are generated from. This sheet is initially filled by an embedded Google Forms that allows fast recording of opportunities, and if needed sales script process.</li>
<li><strong>ROI marketing All:</strong> this sheet tracks the overall marketing ROI</li>
<li><strong>month before Marketing ROI:</strong> This sheet is used for comparisons with the next sheet (mentioned below). The user defines what month to look at the marketing ROI for that month only</li>
<li><strong>month marketing ROI:</strong> this sheet tracks the user defined month as above, used to compare 2 months, or just examine current marketing effectiveness.</li>
<li><strong>Lead Map:</strong> this sheet by using the Google Maps service allows to see all the leads coming from the Names sheet in a geographic fashion</li>
</ul>
<p><strong>The Form:</strong><br />
This is the preferred source of data for the spreadsheet.It populates the names sheet. The form is designed to be modified by the user, to perform a guided sales script, and get information necessary for the user’s business. There are a few primary fields, or questions that are needed for data compiling in later sheets:</p>
<ul>
<li>name</li>
<li>address</li>
<li>sale closed?</li>
<li>source: “how did you hear about us ( primary)?”</li>
</ul>
<p><strong>The Script: Future Reminders</strong><br />
This script checks the date of when the form was filled out, and send a reminder to the person that filled out the form on a user input timetable. It is then expected that the salesperson would call, e-mail, or do some form of follow-up when they get the reminder from the script. Further it is expected that they enter any new information into spreadsheet, and at the next reminder that information will be part of the update.</p>
<p><strong>Lets Get Busy:</strong><br />
Let’s try to use the Spreadsheet, first you have to go to the live form to input values by using the “Form -&gt; Go to live form” menu item: (Note: you will need to copy the sheet so it is in your google apps domain, if you want to use the form entry. This is important to note if you expect entry of data from users outside of your google apps domain. There’s a high possibility there is a solution to this, however it has not been a priority yet as the system works fine for us as this)</p>
<p><img class="aligncenter size-full wp-image-203" alt="Sales Tracking for Google Spreadsheet 1" src="http://www.jellybend.com/wp-content/uploads/2013/01/Sales-Tracking-for-Google-Spreadsheet-1.png" width="916" height="692" /></p>
<p>Fill the form with the following values:</p>
<ul>
<li>Customer name: Sample Customer</li>
<li>Phone Number: 555</li>
<li>Address: Via Boiardo 3, Mirandola (MO) Italy</li>
<li>What intered in?: select Holiday LIghts from the drop down item</li>
<li>Sales Chance %: select 5</li>
<li>Sales Closed?: leave empty</li>
<li>How did the customer hear about us? Primary: select Website</li>
<li>How did the customer hear about us? Secondary: select Google</li>
<li>What is the customer interested in and where?: 5 big rooms</li>
<li>Roof Type: select: Cedar shingles</li>
<li>Customer E-mail: put in your email address</li>
<li>Customers Purpose of Calling: select Price inquiry</li>
<li>Notes on Communication and sales progress.: This is the first contact</li>
<li>Sale Close Date: leave empty</li>
</ul>
<p>And hit the “Submit” button. You should see now the spreadsheet file being populated by the inserted values:</p>
<p><img class="aligncenter size-full wp-image-204" alt="Sales Tracking for Google Spreadsheet 2" src="http://www.jellybend.com/wp-content/uploads/2013/01/Sales-Tracking-for-Google-Spreadsheet-2.png" width="838" height="347" /></p>
<p>Jump over the <strong>“ROI marketing all”</strong> sheet to see what happened:</p>
<p><img class="aligncenter size-full wp-image-205" alt="Sales Tracking for Google Spreadsheet 3" src="http://www.jellybend.com/wp-content/uploads/2013/01/Sales-Tracking-for-Google-Spreadsheet-3.png" width="773" height="357" /></p>
<p>As sources are populated, by the choices made on the form fed to the source field on the “Names” sheet (or could be manually entered). The <strong>user fills in the yellow and green areas</strong> on this sheet. The <strong>yellow “cost”</strong> represents the cost of this source, in the selected time and is manually entered (this may vary between the marketing ROI all sheet, and the monthly sheets.) Be aware, the source field populates from the “Names” sheet and the sources will be in order of first entered. If the rows in the names sheet are changed (by manually entering a row above) this will change the sources order. Ultimately, the cost associated with that source should be double checked to make sure that it is the appropriate cost for that source.</p>
<p><strong>Gross profit percentage:</strong> (the green field): this represents the users average gross profit. (this is best described as the percentage retained after the cost of goods sold is removed, and before expenses). The purpose of the gross profit percentage use is to determine if an advertising source broke even or not. This is one of the primary purposes of the whole entire spreadsheet.</p>
<p><strong>Total Row at Top:</strong> This row compiles this critical data:</p>
<ul>
<li><strong>Number of total leads</strong> to the time.</li>
<li><strong>Number of total sales</strong> for the time.</li>
<li><strong>Total $ made</strong> from all the sales</li>
<li><strong>Average cost per lead</strong></li>
<li><strong>Average cost per sale</strong></li>
<li><strong>Lead to close percentage</strong></li>
</ul>
<p><strong>Jump to the “Month Before Marketing ROI”</strong> ( This sheet is a clone to the “month marketing ROI” they are designed to be able to compare two months side-by-side)</p>
<p><img class="aligncenter size-full wp-image-206" alt="Sales Tracking for Google Spreadsheet 4" src="http://www.jellybend.com/wp-content/uploads/2013/01/Sales-Tracking-for-Google-Spreadsheet-4.png" width="771" height="354" /></p>
<p>This sheet identical to the ROI marketing all sheet stated above, however a month can be defined in the first yellow cell (A1).<br />
A reminder here is to always check the cost and make sure they’re appropriate for the chosen month, when the month is changed the layout of the sources will change according to the first one picked for that month in the name sheet.</p>
<p><strong>Jump to the “Month Marketing ROI”</strong><br />
This is a clone of the above sheet. Its purpose is to be able to compare two months side-by-side, without the need to re-enter the costs for the source.</p>
<p><strong>Jump to the Lead Map:</strong><br />
This page takes the sales leads that have been entered, and puts them on a map if their address was entered. We have found this to be extremely useful in regards to addressing if our marketing is effecting certain neighborhoods, and areas. it has also given us the advantage to contact a lead when we are in their area based on the fact that we are nearby (remember, we are an in-home service-based business so much of our work happens at the customers home)</p>
<p><strong>Follow-up sequences: (Future Reminder script)</strong><br />
One of the most critical activities this sheet will do is send the salesperson a reminder to follow up with the customer on a given sequence of days after the initial contact until the sale closes.<br />
This is accomplished by a custom developed Google Apps Script based on the work of <a title="Romain Vialard" href="https://plus.google.com/u/0/116263732197316259248">Romain Vialard</a>, and revamped by the mast <a title="Marcello Scacchetti" href="https://plus.google.com/u/0/116705044320582612403">Marcello Scacchetti</a>. To access the reminder configuration open the Spreadsheet menu item “Future Reminders -&gt; Preferences”</p>
<p><img class="aligncenter size-full wp-image-207" alt="Sales Tracking for Google Spreadsheet 5" src="http://www.jellybend.com/wp-content/uploads/2013/01/Sales-Tracking-for-Google-Spreadsheet-5.png" width="596" height="476" /><br />
By using the “Select sheet” drop drown menu, you can select the source sheet for the data, by default the “Names” sheet is used where all the lead informations are stored.<br />
The second option “Check dates” is used to specify which column contains date information regarding leads, in the default Spreadsheet date is stored inside column A.<br />
Send the reminder to e-mail address in column allows you to specify where to read email addresses for the salespersons associated to a specific lead. In our case it’s column B.<br />
The scope of the “Stop sending reminders” options is to tell the script to stop sending reminders if the specified column has values. Column H for example is a good setting for this option since it is the sales closed flag. When a sale is closed no more reminders are needed.<br />
Last option is “Schedule days”, basically this field takes a comma separated list of days after which it has to send the reminder. If you set the field with the example values: 5,14,21,30 and the lead date is 01/01/2013 it will send out reminders to the salesperson on 01/06/2013, 01/15/2013, 01/22/2013 and 01/31/2013. The number of days is unlimited. A sample setting is presented here:</p>
<p><img class="aligncenter size-full wp-image-208" alt="Sales Tracking for Google Spreadsheet 6" src="http://www.jellybend.com/wp-content/uploads/2013/01/Sales-Tracking-for-Google-Spreadsheet-6.png" width="595" height="479" /></p>
<p>Clicking the “Save” button will store the desired settings.<br />
By default the script will run automatically each day, but you can run it manually by using the menu item “Future Reminders -&gt; Run manually”.</p>
<p>To use and customize this Spreadsheet make a copy of: <a title="Sales Tracking V 1.2" href="https://docs.google.com/spreadsheet/ccc?key=0AiVfk2mjBcimdGl1OUxZVkc4b0VnV3pGTHZyTzRjRXc">Sales Tracking V 1.2 Spreadsheet</a></p>
<p>Hope you will find this tool useful!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellybend.com/2013/01/14/sales-tracking-for-google-spreadsheet-using-google-apps-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Merge multiple Google Documents</title>
		<link>http://www.jellybend.com/2013/01/10/merge-multiple-google-documents/</link>
		<comments>http://www.jellybend.com/2013/01/10/merge-multiple-google-documents/#comments</comments>
		<pubDate>Thu, 10 Jan 2013 14:03:07 +0000</pubDate>
		<dc:creator>Marcello Scacchetti</dc:creator>
				<category><![CDATA[Google Apps]]></category>
		<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[Google Documents]]></category>
		<category><![CDATA[google apps]]></category>
		<category><![CDATA[google apps script]]></category>
		<category><![CDATA[google documents]]></category>
		<category><![CDATA[merge google documents]]></category>

		<guid isPermaLink="false">http://www.jellybend.com/?p=192</guid>
		<description><![CDATA[Sometime you may need to merge Google Documents together, when they are just two the task is pretty easy and involves a single copy and paste operation. In some situation where you have multiple documents to merge in a constant<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://www.jellybend.com/2013/01/10/merge-multiple-google-documents/">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
				<content:encoded><![CDATA[<p>Sometime you may need to merge Google Documents together, when they are just two the task is pretty easy and involves a single copy and paste operation. In some situation where you have multiple documents to merge in a constant recurring way the copy and paste operation could become a tedious task and an huge waste of time.</p>
<p>For this reason I&#8217;ve created a Spreadsheet document that, with the help of Google Apps Script, will automate the Google Document merge  operation for an unlimited amount of Google Documents.</p>
<p>First of all make a copy of the following Google Spreadsheet document: <a title="Merge multiple Google Documents" href="https://docs.google.com/spreadsheet/ccc?key=0AiVfk2mjBcimdGJPQS1BVlJIU1N5elhWaDJrMmViZkE">Merge multiple Google Documents<img class="aligncenter size-full wp-image-193" alt="Merge multiple Google Documents 1" src="http://www.jellybend.com/wp-content/uploads/2013/01/Merge-multiple-Google-Documents-1.png" width="736" height="358" /></a></p>
<p>To merge Google Documents you need the Document ID for each of them. Getting the Document ID is pretty easy, just open the Google Document you want to merge and look at the browser address bar:</p>
<p><img class="aligncenter size-full wp-image-194" alt="Merge multiple Google Documents 2" src="http://www.jellybend.com/wp-content/uploads/2013/01/Merge-multiple-Google-Documents-2.png" width="814" height="29" /></p>
<p>The ID of the document is the string between &#8220;../d/&#8221; and &#8220;/edit&#8221;, in this example the ID is: &#8220;1uWocGqA7Bifl61Vu8-TOWpALDHic8gbc5oCuZivZ1Dg&#8221;. All you have to do is to put this ID from cell A5 of the Spreadsheet document:</p>
<p><img class="aligncenter size-full wp-image-195" alt="Merge multiple Google Documents 3" src="http://www.jellybend.com/wp-content/uploads/2013/01/Merge-multiple-Google-Documents-3.png" width="738" height="325" /></p>
<p>You can add an unlimited number of document ids, just put them vertically from cell A5. When you have finished inserting all the Document ID to merge run the menu item &#8220;Merge Documents -&gt; Merge&#8221;:</p>
<p><img class="aligncenter size-full wp-image-196" alt="Merge multiple Google Documents 4" src="http://www.jellybend.com/wp-content/uploads/2013/01/Merge-multiple-Google-Documents-4.png" width="740" height="143" /></p>
<p>As result of the execution a new Google Document file will be created inside your Google Drive folder &#8220;My Drive&#8221;:</p>
<p><img class="aligncenter size-full wp-image-197" alt="Merge multiple Google Documents 5" src="http://www.jellybend.com/wp-content/uploads/2013/01/Merge-multiple-Google-Documents-5.png" width="420" height="76" /></p>
<p>Right now this solution doesn&#8217;t play nice with images contained inside Google Documents. In the merged document images will result broken. This is a known Google Apps Script bug, you can find more informations here: <a title="Google Apps Script Issue: 1612" href="http://code.google.com/p/google-apps-script-issues/issues/detail?id=1612&amp;q=paragraph&amp;colspec=Stars%20Opened%20ID%20Type%20Status%20Summary%20Component%20Owner">Google Apps Script Issue: 1612</a>. As soon as Google engineers fix this bug the script should work with images without problems. The only option for you right now, if you need to merge documents that include images, is to &#8220;star&#8221; the issue 1612 on the issue tracker to speed up the possible resolution.</p>
<p>Happy scripting!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellybend.com/2013/01/10/merge-multiple-google-documents/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>How to remove a Google Apps Script from a Spreadsheet document</title>
		<link>http://www.jellybend.com/2013/01/08/how-to-remove-a-google-apps-script-from-a-spreadsheet-document/</link>
		<comments>http://www.jellybend.com/2013/01/08/how-to-remove-a-google-apps-script-from-a-spreadsheet-document/#comments</comments>
		<pubDate>Tue, 08 Jan 2013 18:22:06 +0000</pubDate>
		<dc:creator>Mary Scarpellini</dc:creator>
				<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[Spreadsheet]]></category>
		<category><![CDATA[google apps script]]></category>
		<category><![CDATA[spreadsheet]]></category>

		<guid isPermaLink="false">http://www.jellybend.com/?p=182</guid>
		<description><![CDATA[If you have read my last blog post titled: &#8220;How to install scripts from the Script Gallery of Google Spreadsheet&#8221;, you should have a script installed on a Spreadsheet document. Now I’ll try to explain you the process required to<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://www.jellybend.com/2013/01/08/how-to-remove-a-google-apps-script-from-a-spreadsheet-document/">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
				<content:encoded><![CDATA[<p>If you have read my last blog post titled: <a title="How to install scripts from the Script Gallery of Google Spreadsheet" href="http://www.jellybend.com/2013/01/04/how-to-install-scripts-from-the-script-gallery-of-google-spreadsheet/">&#8220;How to install scripts from the Script Gallery of Google Spreadsheet&#8221;</a>, you should have a script installed on a Spreadsheet document.<br />
Now I’ll try to explain you the process required to remove an installed script.</p>
<p>Open the Spreadsheet document where you have installed the script, every time a script is installed, it get’s added to the &#8220;Script Manager&#8221;.</p>
<p>The Script Manager is a panel where you can see all scripts installed on your Spreadsheet document.</p>
<p>From the &#8220;Script Manager&#8221; you can:<br />
- View all the functions provided by installed scripts<br />
- Run a Google Apps Script function manually<br />
- Edit the Google Apps Scripts<br />
- Open the Script Editor</p>
<p>To access the &#8220;Script Manager&#8221; click on &#8220;Tools -&gt; Script manager&#8230;&#8221; menu item of the Spreadsheet document.<br />
<img class="aligncenter size-full wp-image-183" alt="How to remove a Google Apps Script 1" src="http://www.jellybend.com/wp-content/uploads/2013/01/How-to-remove-a-Google-Apps-Script-1.png" width="535" height="369" /></p>
<p style="text-align: left;"><img class="aligncenter size-full wp-image-184" alt="How to remove a Google Apps Script 2" src="http://www.jellybend.com/wp-content/uploads/2013/01/How-to-remove-a-Google-Apps-Script-2.png" width="498" height="498" /><br />
To remove the installed script, you have to click on any of the function names associated with the script you want to remove and click on the &#8220;Edit&#8221; button.<br />
<img class="aligncenter" alt="How to remove a Google Apps Script 2 b" src="http://www.jellybend.com/wp-content/uploads/2013/01/How-to-remove-a-Google-Apps-Script-2-b.png" width="514" height="496" /></p>
<p style="text-align: left;">When the Script Editor loads, click on the &#8220;File -&gt; Delete&#8230;&#8221; menu item.</p>
<p><img class="aligncenter size-full wp-image-186" alt="How to remove a Google Apps Script 3" src="http://www.jellybend.com/wp-content/uploads/2013/01/How-to-remove-a-Google-Apps-Script-3.png" width="398" height="444" /><br />
Click on the &#8220;Yes&#8221; button to confirm.<br />
<img class="aligncenter size-full wp-image-187" alt="How to remove a Google Apps Script 4" src="http://www.jellybend.com/wp-content/uploads/2013/01/How-to-remove-a-Google-Apps-Script-4.png" width="494" height="168" /><br />
The Script Editor will close and you’ll return to the &#8220;Script Manager&#8221;.<br />
Close the &#8220;Script Manager” window by clicking on the &#8220;Close&#8221; button.<br />
<img class="aligncenter size-full wp-image-188" alt="how to remove a Google Apps Script 6" src="http://www.jellybend.com/wp-content/uploads/2013/01/how-to-remove-a-Google-Apps-Script-6.png" width="470" height="480" /><br />
As last step, you have to verify that you have really removed the script.</p>
<p>So re-open the &#8220;Script Manager&#8221; by clicking on the &#8220;Tools -&gt; Script manager&#8230;&#8221; menu item of the Spreadsheet document.<br />
<img class="aligncenter size-full wp-image-189" alt="How to remove a Google Apps Script 1" src="http://www.jellybend.com/wp-content/uploads/2013/01/How-to-remove-a-Google-Apps-Script-11.png" width="535" height="369" /><br />
If the &#8220;Script Manager&#8221; contains the string &#8220;No scripts found&#8221; or the name of the script you want to delete is not present in the scripts list means that you have successfully removed the Google Apps Script.<br />
<img class="aligncenter size-full wp-image-190" alt="How to remove a Google Apps Script 7" src="http://www.jellybend.com/wp-content/uploads/2013/01/How-to-remove-a-Google-Apps-Script-7.png" width="520" height="489" /><br />
This is an example of a Google Apps Script removal that can be useful if you want to delete a Google Apps Script installed inside a Spreadsheet document while keeping the original document. It can also be useful to remove Google Apps Script that run periodically and automatically in background that you no longer need.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellybend.com/2013/01/08/how-to-remove-a-google-apps-script-from-a-spreadsheet-document/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to install scripts from the Script Gallery of Google Spreadsheet</title>
		<link>http://www.jellybend.com/2013/01/04/how-to-install-scripts-from-the-script-gallery-of-google-spreadsheet/</link>
		<comments>http://www.jellybend.com/2013/01/04/how-to-install-scripts-from-the-script-gallery-of-google-spreadsheet/#comments</comments>
		<pubDate>Fri, 04 Jan 2013 17:41:32 +0000</pubDate>
		<dc:creator>Mary Scarpellini</dc:creator>
				<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[Script Gallery]]></category>
		<category><![CDATA[Spreadsheet]]></category>
		<category><![CDATA[google apps script]]></category>
		<category><![CDATA[google spreadsheet]]></category>
		<category><![CDATA[script gallery]]></category>

		<guid isPermaLink="false">http://www.jellybend.com/?p=170</guid>
		<description><![CDATA[In a Spreadsheet document you can access a list of &#8220;ready to use&#8221; scripts to add functionalities to the Spreadsheet document itself or to be able to interact with other components of the Google Apps suite. Ready to use scripts<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://www.jellybend.com/2013/01/04/how-to-install-scripts-from-the-script-gallery-of-google-spreadsheet/">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
				<content:encoded><![CDATA[<p>In a Spreadsheet document you can access a list of &#8220;ready to use&#8221; scripts to add functionalities to the Spreadsheet document itself or to be able to interact with other components of the Google Apps suite.<br />
Ready to use scripts are located inside the Script Gallery that provides you the ability to search, browser them by category.</p>
<p>To access the &#8220;Script Gallery&#8221; click on &#8220;Tools -&gt; Script gallery&#8221; menu item of Spreadsheet document.<br />
<img class="aligncenter size-full wp-image-171" alt="google apps script gallery 1" src="http://www.jellybend.com/wp-content/uploads/2013/01/script-gallery-1.png" width="516" height="370" /></p>
<p><img class="aligncenter size-full wp-image-172" alt="google apps script gallery 2" src="http://www.jellybend.com/wp-content/uploads/2013/01/script-gallery-2.png" width="704" height="525" /><br />
When you open the Script Gallery you can find:</p>
<ol>
<li>A list of script categories</li>
<li>A Search form</li>
<li>The list of scripts</li>
</ol>
<p>You can skim through the scripts by clicking on the categories or by searching using the search form.</p>
<p>If you find a script that you want to install, just click the &#8220;Install&#8221; button.<br />
<img class="aligncenter size-full wp-image-173" alt="google apps script gallery 3" src="http://www.jellybend.com/wp-content/uploads/2013/01/script-gallery-3.png" width="700" height="323" /><br />
So let&#8217;s try to install a script, as an example I&#8217;ll install the Gmail Meter script.<br />
This script created by <a href="https://plus.google.com/u/0/116263732197316259248/about">Romain Vialard</a>, provides you a nice report about your Gmail using habits.<br />
<img class="aligncenter size-full wp-image-174" alt="google apps script gallery 4" src="http://www.jellybend.com/wp-content/uploads/2013/01/script-gallery-4.png" width="632" height="470" /><br />
This kind of script requires access to Google Apps services, for this reason you have to authorize it by clicking the &#8220;Authorize&#8221; button.<br />
<img class="aligncenter size-full wp-image-175" alt="google apps script gallery 5" src="http://www.jellybend.com/wp-content/uploads/2013/01/script-gallery-5.png" width="828" height="281" /><br />
Click on &#8220;Grant Access&#8221;<br />
<img class="aligncenter size-full wp-image-176" alt="google apps script gallery 6" src="http://www.jellybend.com/wp-content/uploads/2013/01/script-gallery-6.png" width="214" height="138" /><br />
Click on the &#8220;Close&#8221; button to complete the script installation.<br />
<img class="aligncenter size-full wp-image-177" alt="google apps script gallery 7" src="http://www.jellybend.com/wp-content/uploads/2013/01/script-gallery-7.png" width="718" height="538" /><br />
As you can see from the screenshot above, the script is installed, click now the &#8220;Close&#8221; button to go back to your Spreadsheet document.</p>
<p>The Spreadsheet  document will now contain a new menu named &#8220;Gmail Meter&#8221;.<br />
<img class="aligncenter size-full wp-image-178" alt="google apps script gallery 8" src="http://www.jellybend.com/wp-content/uploads/2013/01/script-gallery-8.png" width="541" height="211" /><br />
Click on &#8220;Gmail Meter -&gt; Get a Report&#8221; menu item to load the configuration options for the script. A new popup window will appear:</p>
<p><img class="aligncenter size-full wp-image-179" alt="google apps script gallery 9" src="http://www.jellybend.com/wp-content/uploads/2013/01/script-gallery-9.png" width="611" height="424" /><br />
Choose &#8220;Monthly report&#8221; or &#8220;Custom report&#8221; by clicking on the &#8220;Get it&#8221; button under the chosen report type.</p>
<p>For this example, select the &#8220;Monthly report&#8221; clicking the &#8220;Get it&#8221; button under it and confirmation screen appears if everything is setup correctly.<br />
<img class="aligncenter size-full wp-image-180" alt="google apps script gallery 10" src="http://www.jellybend.com/wp-content/uploads/2013/01/script-gallery-10-.png" width="489" height="336" /><br />
Congratulation, you have installed your first script from the &#8220;Script Gallery&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellybend.com/2013/01/04/how-to-install-scripts-from-the-script-gallery-of-google-spreadsheet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sync Google Contacts with Google Spreadsheet adding custom fields</title>
		<link>http://www.jellybend.com/2013/01/04/sync-google-contacts-with-google-spreadsheet-adding-custom-fields/</link>
		<comments>http://www.jellybend.com/2013/01/04/sync-google-contacts-with-google-spreadsheet-adding-custom-fields/#comments</comments>
		<pubDate>Fri, 04 Jan 2013 10:17:10 +0000</pubDate>
		<dc:creator>Marcello Scacchetti</dc:creator>
				<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[Google Contacts]]></category>
		<category><![CDATA[Spreadsheet]]></category>
		<category><![CDATA[google apps script]]></category>
		<category><![CDATA[google contacts]]></category>
		<category><![CDATA[google spreadsheet]]></category>

		<guid isPermaLink="false">http://www.jellybend.com/?p=156</guid>
		<description><![CDATA[Following a discussion happened on the Google+ Google Apps Script community, Rob Aubrey asked the possibility to synchronize Google Contacts to a Google Spreadsheet document and add a custom field managed directly inside Google Spreadsheet that should be synched back to Google Contacts,<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://www.jellybend.com/2013/01/04/sync-google-contacts-with-google-spreadsheet-adding-custom-fields/">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
				<content:encoded><![CDATA[<p>Following a discussion happened on the Google+ <a title="Google Apps Script community" href="https://plus.google.com/communities/102471985047225101769">Google Apps Script community</a>, <a title="Rob Aubrey Google+ Profile" href="https://plus.google.com/115947768346262543299">Rob Aubrey</a> asked the possibility to synchronize Google Contacts to a Google Spreadsheet document and add a custom field managed directly inside Google Spreadsheet that should be synched back to Google Contacts, in our case the &#8220;Date Last Contacted&#8221; custom field. We have worked together and this I&#8217;m showing here the result of our work.</p>
<p>First of all make a copy of the following Spreadsheet document: <a title="Google Contacts Sync" href="https://docs.google.com/spreadsheet/ccc?key=0AiVfk2mjBcimdENfbFhydk5fd0dzY3RET3FIUHh6aGc">Google Contacts Sync</a>.</p>
<p><img class="size-full wp-image-157 aligncenter" alt="Google Contacts Sync 1" src="http://www.jellybend.com/wp-content/uploads/2013/01/Google-Contacts-Sync-1.png" width="915" height="393" /></p>
<p>A new custom menu called Contacts should appear, click on &#8220;Contacts -&gt; Configure&#8221; menu item, an authorization window should popup.</p>
<p><img class="size-full wp-image-158 aligncenter" alt="Google Contacts Sync 2" src="http://www.jellybend.com/wp-content/uploads/2013/01/Google-Contacts-Sync-2.png" width="915" height="500" /></p>
<p>Click the &#8220;OK&#8221; button to proceed.</p>
<p><img class="size-full wp-image-159 aligncenter" alt="Google Contacts Sync 3" src="http://www.jellybend.com/wp-content/uploads/2013/01/Google-Contacts-Sync-3.png" width="697" height="267" /></p>
<p>Now click the &#8220;Grant access&#8221; button to allow the script to access your Google Contacts.</p>
<p><img class="size-full wp-image-160 aligncenter" alt="Google Contacts Sync 4" src="http://www.jellybend.com/wp-content/uploads/2013/01/Google-Contacts-Sync-4.png" width="264" height="147" /></p>
<p>Click &#8220;Close&#8221; button to return to your Spreadsheet document. Click on &#8220;Contacts -&gt; Configure&#8221; menu item again to load the script configuration interface.</p>
<p><img class="size-full wp-image-161 aligncenter" alt="Google Contacts Sync 5" src="http://www.jellybend.com/wp-content/uploads/2013/01/Google-Contacts-Sync-5.png" width="595" height="477" /></p>
<p>As you can see all your Google Contacts groups are loaded inside the &#8220;Select contacts group to sync&#8221; drop-down field. Select the Google Contacts group to synchronize from the drop-down field and hit the &#8220;Save button&#8221;.</p>
<p><img class="size-full wp-image-162 aligncenter" alt="Google Contacts Sync 6" src="http://www.jellybend.com/wp-content/uploads/2013/01/Google-Contacts-Sync-6.png" width="597" height="477" /></p>
<p>This screen confirms that your settings have been saved correctly, now press the &#8220;Close&#8221; button. Everything is setup to run your first sync. Click on &#8220;Contacts -&gt; Sync contacts&#8221; menu item to start the synchronization process. You should see all contacts of the specified group to show up inside the Spreadsheet document.</p>
<p><img class="size-full wp-image-164 aligncenter" alt="Google Contacts Sync 8" src="http://www.jellybend.com/wp-content/uploads/2013/01/Google-Contacts-Sync-8.png" width="914" height="168" /></p>
<p>Now you can add some values inside the &#8220;Date Last Contacted&#8221; column as follows:</p>
<p><img class="size-full wp-image-165 aligncenter" alt="Google Contacts Sync 9" src="http://www.jellybend.com/wp-content/uploads/2013/01/Google-Contacts-Sync-9.png" width="912" height="182" /></p>
<p>Simply run again the synchronization process by clicking on the &#8221;Contacts -&gt; Sync contacts&#8221; menu item. Now go to your Google Contacts and you should see the newly created custom field: &#8220;Date Last Contacted&#8221; populated with the specified values:</p>
<p><img class="size-full wp-image-166 aligncenter" alt="Google Contacts Sync 10" src="http://www.jellybend.com/wp-content/uploads/2013/01/Google-Contacts-Sync-10.png" width="766" height="470" /></p>
<p>Of course you can setup triggers to run this script automatically at your preferred time interval.</p>
<p>The synchronization process follows these rules:</p>
<p>Any modification made to the contact data inside the spreadsheet will be overwritten with Google Contacts data during the sync (don&#8217;t touch please the Id column that is the reference).<br />
Any change made to the custom &#8220;Date Last Contacted&#8221; field inside Google Contacts will be overwritten by the value inside the &#8220;Date Last Contacted&#8221; column of Spreadsheet document at each sync.</p>
<p>Happy scripting!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellybend.com/2013/01/04/sync-google-contacts-with-google-spreadsheet-adding-custom-fields/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Personal Kanban with Google Spreadsheet and Google Apps Script</title>
		<link>http://www.jellybend.com/2013/01/02/personal-kanban-with-google-spreadsheet-and-google-apps-script/</link>
		<comments>http://www.jellybend.com/2013/01/02/personal-kanban-with-google-spreadsheet-and-google-apps-script/#comments</comments>
		<pubDate>Wed, 02 Jan 2013 09:30:37 +0000</pubDate>
		<dc:creator>Marcello Scacchetti</dc:creator>
				<category><![CDATA[Google Apps Script]]></category>
		<category><![CDATA[Spreadsheet]]></category>
		<category><![CDATA[google apps script]]></category>
		<category><![CDATA[google spreadsheet]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[personal kanban]]></category>
		<category><![CDATA[spreadsheet]]></category>

		<guid isPermaLink="false">http://www.jellybend.com/?p=123</guid>
		<description><![CDATA[Kanban is a method for developing software products and processes with an emphasis on just-in-time delivery while not overloading the software developers. In this approach, the process, from definition of a task to its delivery to the customer, is displayed<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://www.jellybend.com/2013/01/02/personal-kanban-with-google-spreadsheet-and-google-apps-script/">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
				<content:encoded><![CDATA[<p>Kanban is a method for developing software products and processes with an emphasis on just-in-time delivery while not overloading the software developers. In this approach, the process, from definition of a task to its delivery to the customer, is displayed for participants to see and developers pull work from a queue. Kanban for software development has been formulated by <a title="David J. Anderson and Associates" href="http://www.agilemanagement.net">David J. Anderson</a>. The application of kanban to personal work originated with <a title="Personal Kanban" href="http://www.personalkanban.com/pk/">Jim Benson</a> after he became exposed to related concepts through his associations with David Anderson, Corey Ladas and Don Reinertsen. (<a title="Kanban" href="http://en.wikipedia.org/wiki/Kanban">Wikipedia</a>)</p>
<p style="text-align: center;"><img class="size-full wp-image-124 aligncenter" alt="Personal Kanban with Google Spreadsheet and Google Apps Script 1" src="http://www.jellybend.com/wp-content/uploads/2013/01/Personal-Kanban-with-Google-Spreadsheet-and-Google-Apps-Script-1.png" width="1074" height="790" /></p>
<p>The spreadsheet is split into three separated logical column: BACKLOG, DOING and DONE. In kanban these columns are called lanes. Each lane contain items or tasks that move from the left to the right. The BACKLOG lane is dedicated to items that are ready to be processed, DOING items are things that you are currently working on, DONE items are completed tasks. A deep explanation about Personal Kanban, visualization and work in progress limiting is outside the scope of this post and I strongly suggest you to refer to <a title="Personal Kanban" href="http://www.personalkanban.com/pk/">personalkanban.com</a> web site or the book: <a title="Personal Kanban: Mapping Work | Navigating Life" href="http://www.amazon.com/Personal-Kanban-Mapping-Work-Navigating/dp/1453802266/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1357117337&amp;sr=1-1&amp;keywords=personal+kanban">Personal Kanban: Mapping Work | Navigating Life</a> by Jim Benson.</p>
<p>Let&#8217;s see how to use this spreadsheet, first of all make a copy of the <a title="Personal Kanban Spreadsheet" href="https://docs.google.com/spreadsheet/ccc?key=0AiVfk2mjBcimdEY1cjF1YUdfY2ZMX2JMYWk3QXhpQXc">Personal Kanban Spreadsheet</a>.</p>
<p>As you can see a new menu called &#8220;Personal Kanban&#8221; has been added to the spreadsheet. By using this menu you can access all the features available for the Personal Kanban system:</p>
<p style="text-align: center;"><img class="size-full wp-image-125 aligncenter" alt="Personal Kanban with Google Spreadsheet and Google Apps Script 2" src="http://www.jellybend.com/wp-content/uploads/2013/01/Personal-Kanban-with-Google-Spreadsheet-and-Google-Apps-Script-2.png" width="467" height="368" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Let&#8217;s start by clicking the menu item called &#8220;Add backlog item&#8221; to insert our first item in the BACKLOG lane:</p>
<p style="text-align: center;"><img class="size-full wp-image-126 aligncenter" alt="Personal Kanban with Google Spreadsheet and Google Apps Script 3" src="http://www.jellybend.com/wp-content/uploads/2013/01/Personal-Kanban-with-Google-Spreadsheet-and-Google-Apps-Script-3.png" width="578" height="530" /></p>
<p>&nbsp;</p>
<p>As you can see an item is composed by a Title and Description, for now just fill the form with the following values and click the &#8220;Save&#8221; button:</p>
<p style="text-align: center;"><img class="size-full wp-image-127 aligncenter" alt="Personal Kanban with Google Spreadsheet and Google Apps Script 4" src="http://www.jellybend.com/wp-content/uploads/2013/01/Personal-Kanban-with-Google-Spreadsheet-and-Google-Apps-Script-4.png" width="561" height="538" /></p>
<p>&nbsp;</p>
<p>A new item in the BACKLOG lane will be created for you automatically:</p>
<p><img class="size-full wp-image-128 aligncenter" alt="Personal Kanban with Google Spreadsheet and Google Apps Script 5" src="http://www.jellybend.com/wp-content/uploads/2013/01/Personal-Kanban-with-Google-Spreadsheet-and-Google-Apps-Script-5.png" width="1075" height="251" /></p>
<p>Now repeat these steps to create other 3 items as shown in the following screenshot:</p>
<p><img class="size-full wp-image-130 aligncenter" alt="Personal Kanban with Google Spreadsheet and Google Apps Script 7" src="http://www.jellybend.com/wp-content/uploads/2013/01/Personal-Kanban-with-Google-Spreadsheet-and-Google-Apps-Script-7.png" width="1046" height="401" /></p>
<p>To operate on items you have to select a cell belonging to the item, it doesn&#8217;t matter if you select the title cell or description cell. For this example select the cell containing the title &#8220;Second Task&#8221;. Now open the menu &#8220;Personal Kanban&#8221; and select &#8220;Move item forward&#8221;.</p>
<p><img class="size-full wp-image-131 aligncenter" alt="Personal Kanban with Google Spreadsheet and Google Apps Script 8" src="http://www.jellybend.com/wp-content/uploads/2013/01/Personal-Kanban-with-Google-Spreadsheet-and-Google-Apps-Script-8.png" width="328" height="330" /></p>
<p>As you can see the &#8220;Second Task&#8221; item is effectively moved to the DOING lane and all the items into the BACKLOG lane are automatically moved to fill the gaps derived from the move operation.</p>
<p><img class="size-full wp-image-132 aligncenter" alt="Personal Kanban with Google Spreadsheet and Google Apps Script 9" src="http://www.jellybend.com/wp-content/uploads/2013/01/Personal-Kanban-with-Google-Spreadsheet-and-Google-Apps-Script-9.png" width="1045" height="282" /></p>
<p>Select again the cell containing the &#8220;Second Task&#8221; title and execute again the &#8220;Move item forward&#8221; operation:</p>
<p><img class="size-full wp-image-134 aligncenter" alt="Personal Kanban with Google Spreadsheet and Google Apps Script 11" src="http://www.jellybend.com/wp-content/uploads/2013/01/Personal-Kanban-with-Google-Spreadsheet-and-Google-Apps-Script-11.png" width="1047" height="275" /></p>
<p>The system has automatically changed the background color of the &#8220;Second Task&#8221; item to green to indicate that the item has been completed successfully. We want now to simulate something different, an item could have an issue and can&#8217;t be executed, this is said that the task as an &#8220;impediment&#8221;. Select the cell containing the &#8220;Third Task&#8221; title and execute a &#8220;Move item forward&#8221; operation:</p>
<p><img class="size-full wp-image-135 aligncenter" alt="Personal Kanban with Google Spreadsheet and Google Apps Script 12" src="http://www.jellybend.com/wp-content/uploads/2013/01/Personal-Kanban-with-Google-Spreadsheet-and-Google-Apps-Script-12.png" width="1046" height="273" /></p>
<p>Select again the cell containing the &#8220;Third Task&#8221; title and open the &#8220;Personal Kanban&#8221; menu.</p>
<p><img class="size-full wp-image-136 aligncenter" alt="Personal Kanban with Google Spreadsheet and Google Apps Script 13" src="http://www.jellybend.com/wp-content/uploads/2013/01/Personal-Kanban-with-Google-Spreadsheet-and-Google-Apps-Script-13.png" width="313" height="321" /></p>
<p>Now select the menu item called &#8220;Set impediment on item&#8221;.</p>
<p><img class="size-full wp-image-137 aligncenter" alt="Personal Kanban with Google Spreadsheet and Google Apps Script 14" src="http://www.jellybend.com/wp-content/uploads/2013/01/Personal-Kanban-with-Google-Spreadsheet-and-Google-Apps-Script-14.png" width="1046" height="274" /></p>
<p>As you can see the background color of the item became red to indicate that an impediment happened on the task.</p>
<p>From the &#8220;Personal Kanban&#8221; menu item you can access at more operation available in the spreadsheet. You can find the Personal Kanban Spreadsheet <a title="Personal Kanban Spreadsheet" href="https://docs.google.com/spreadsheet/ccc?key=0AiVfk2mjBcimdEY1cjF1YUdfY2ZMX2JMYWk3QXhpQXc">here</a> remember to make a copy of it.</p>
<p>Happy scripting!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellybend.com/2013/01/02/personal-kanban-with-google-spreadsheet-and-google-apps-script/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Archive Gmail messages to Google Drive folders</title>
		<link>http://www.jellybend.com/2012/12/20/archive-gmail-messages-to-google-drive-folders/</link>
		<comments>http://www.jellybend.com/2012/12/20/archive-gmail-messages-to-google-drive-folders/#comments</comments>
		<pubDate>Thu, 20 Dec 2012 14:51:07 +0000</pubDate>
		<dc:creator>Marcello Scacchetti</dc:creator>
				<category><![CDATA[Gmail]]></category>
		<category><![CDATA[Google Drive]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[google apps script]]></category>
		<category><![CDATA[google drive]]></category>

		<guid isPermaLink="false">http://www.jellybend.com/?p=99</guid>
		<description><![CDATA[By using this script you can archive Gmail messages to Google Drive including message attachments. First of all create a copy of the following spreadsheet document: Archive Gmail messages to Google Drive The spreadsheet document should contain a new menu item<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://www.jellybend.com/2012/12/20/archive-gmail-messages-to-google-drive-folders/">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
				<content:encoded><![CDATA[<p>By using this script you can archive Gmail messages to Google Drive including message attachments. First of all create a copy of the following spreadsheet document: <a title="Archive Gmail messages to Google Drive" href="https://docs.google.com/spreadsheet/ccc?key=0AiVfk2mjBcimdF80RzMxeFd1YWdjWGlxWVctYUFqeGc">Archive Gmail messages to Google Drive</a></p>
<p>The spreadsheet document should contain a new menu item called &#8220;Gmail Archiver&#8221;. Click on &#8221;Gmail Archiver&#8221; menu and select &#8220;Initialize&#8221;. You should see an authorization request like the following:</p>
<p><a href="http://www.jellybend.com/2012/12/20/archive-gmail-messages-to-google-drive-folders/archive-gmail-messages-to-google-drive-1/" rel="attachment wp-att-100"><img class="alignnone size-full wp-image-100" alt="Archive Gmail messages to Google Drive 1" src="http://www.jellybend.com/wp-content/uploads/2012/12/Archive-Gmail-messages-to-Google-Drive-1.png" width="916" height="502" /></a></p>
<p>&nbsp;</p>
<p>Press &#8220;OK&#8221; button to authorize and follow the authorization process. Now click again  on &#8221;Gmail Archiver&#8221; menu and select &#8220;Initialize&#8221;. You should see now a confirmation box about the successful initialization of the script.</p>
<p><a href="http://www.jellybend.com/2012/12/20/archive-gmail-messages-to-google-drive-folders/archive-gmail-messages-to-google-drive-2/" rel="attachment wp-att-101"><img class="size-full wp-image-101 aligncenter" alt="Archive Gmail messages to Google Drive 2" src="http://www.jellybend.com/wp-content/uploads/2012/12/Archive-Gmail-messages-to-Google-Drive-2.png" width="456" height="338" /></a></p>
<p>The script created for you a new Gmail label called &#8220;Archive to Drive&#8221; and a new drive folder called &#8220;Email Archive&#8221; where Gmail messages will be stored.</p>
<p>Now go to Gmail and add the Gmail label &#8220;Archive to Drive&#8221; to each message you want to archive:</p>
<p><a href="http://www.jellybend.com/2012/12/20/archive-gmail-messages-to-google-drive-folders/archive-gmail-messages-to-google-drive-3/" rel="attachment wp-att-102"><img class="alignnone size-full wp-image-102" alt="Archive Gmail messages to Google Drive 3" src="http://www.jellybend.com/wp-content/uploads/2012/12/Archive-Gmail-messages-to-Google-Drive-3.png" width="940" height="318" /></a></p>
<p>Now go back to the spreadsheet document and click  on &#8221;Gmail Archiver&#8221; menu and select &#8220;Archive Gmail Messages&#8221;. After some seconds you should see a message like:</p>
<p><a href="http://www.jellybend.com/2012/12/20/archive-gmail-messages-to-google-drive-folders/archive-gmail-messages-to-google-drive-4/" rel="attachment wp-att-103"><img class="size-full wp-image-103 aligncenter" alt="Archive Gmail messages to Google Drive 4" src="http://www.jellybend.com/wp-content/uploads/2012/12/Archive-Gmail-messages-to-Google-Drive-4.png" width="491" height="340" /></a></p>
<p>&nbsp;</p>
<p>Now go to Google Drive inside folder &#8220;Email Archive&#8221; and you should see a new folder representing the exported email message:</p>
<p><a href="http://www.jellybend.com/2012/12/20/archive-gmail-messages-to-google-drive-folders/archive-gmail-messages-to-google-drive-5/" rel="attachment wp-att-104"><img class="alignnone size-full wp-image-104" alt="Archive Gmail messages to Google Drive 5" src="http://www.jellybend.com/wp-content/uploads/2012/12/Archive-Gmail-messages-to-Google-Drive-5.png" width="1024" height="166" /></a></p>
<p>&nbsp;</p>
<p>Now entering the newly created folder you should see the email messages content saves as a PDF file and all message attachments saved as separate files:</p>
<p><a href="http://www.jellybend.com/2012/12/20/archive-gmail-messages-to-google-drive-folders/archive-gmail-messages-to-google-drive-6/" rel="attachment wp-att-105"><img class="alignnone size-full wp-image-105" alt="Archive Gmail messages to Google Drive 6" src="http://www.jellybend.com/wp-content/uploads/2012/12/Archive-Gmail-messages-to-Google-Drive-6.png" width="1013" height="194" /></a></p>
<p>Enjoy and happy scripting!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellybend.com/2012/12/20/archive-gmail-messages-to-google-drive-folders/feed/</wfw:commentRss>
		<slash:comments>58</slash:comments>
		</item>
	</channel>
</rss>
