Creating a Google Sheet Geo Map From Form Data and Posting it to WordPress – Part 3 of Google Forms in WordPress with Live Chart Project

Google Forms, Google Sheets (IMPORTXML), XML Path, WordPress

Note: This is part 3 of a larger project. Each part of the project is self contained should you wish to reference just one particular aspect. Alternatively, you can follow along with the project to practice workflow and learn about Google Forms, Sheets, WordPress integration and a little HTML5 and Javascript. You can access the beginning of the project here: 

Creating a Short Google Form Survey and Embedding it into a WordPress Post – Part 1 of Google Forms in WordPress with Live Chart Project

Embedding a Live Google Sheet Graph that Updates Every 30 Seconds into a WordPress Post – Part 2 of Google Forms in WordPress with Live Chart Project

Where We Left Off

After creating and embedding a Google Form into our WordPress post, in our last tutorial we added a graph of all the results from the survey that updates every 30 seconds.

In this tutorial we are going to add a country selection to our form and then embed a country heat map into our post.

Geo Heatmap Google

Creating a Country Drop-Down List in Google Forms

The Countries List

Getting The Country Data

First off, we need to find a list of countries. I’m going grab that from https://www.listofcountriesoftheworld.com.  I could probably just copy the list and paste them in but I might want to use the list of countries again as a reference for other calculations in my sheet so I am going to go to my Google Sheet that is connected to my form and create a new Sheet tab named Countries.

In our A1 Cell of Countries, I am going to use the formula IMPORTXML to get the country names from the List of Countries of The World website.

IMPORTXML takes two arguments:

  1. The URL that you will be extracting data from.
  2. The extraction parameters using a XML Path query.

What the Bloody Bloody is a XML Path query?!

Okay, hold up. Let’s briefly look at XML Path first. XML has a very similar syntax to HTML. It uses the same style for its elements like this:

  • HTML: <div></div>
  • XML: <bananas></bananas>

The difference being that HTML elements have a specific purpose or functiom while XLM Elements are more like labels (I know someones gonna complain about this oversimplification). XML can take all of the same attributes (e.g. id, class, style) as HTML.

The XML Path, XPath, is the query language used to search for items nested  in XML  and even HTML documents. A handy cheat-sheet for XPath queries can be found at DEVHINT.IO.

Back to our Google Sheet IMPORTXML …

Load the List of Countries of The World site in your Chrome browser and hit CTRL + SHIFT + C . This will open the Developer Dashboard and allow you to hover over elements in the page to inspect them. Hover over the country names to take a look at them.

Chrome Dev Dashboard Element Inspection

So, it looks like the each country name is surrounded by a <div> with an id of "ctry". Cool. We can use that in our XPath query to extract all the countries on this page. Our query will look a little like this:

"//div[@id='ctry']"

Let’s break this down:

  1. // : looks for any descendant element.
  2. div : that is a <div> element,
  3. [] : with some specific attribute in the div.
  4. @id='ctry' : with an id of ‘ctry’.

Alright, we have everything. Time to put it into our formula:

=IMPORTXML("http://www.listofcountriesoftheworld.com", "//div[@id='ctry']")

IMPORTXML Google Sheets

Adding the Country Data to Your Google Form

Now, go back to your Google Form and create a new question item at the top.

To the right of your form editor there will be a thin selection menu with a “+”. Click that to add a new item. Add the title. Then go back to your sheet and copy the Countries list and paste it into the Form options. The list items will paste in each option automatically. Finally, set the question to required.

Copy Paste Country

Google Form Required

Now take a preview to see what it looks like:

Form Preview with Country

Now go back to your attached Google sheet and take a look at the Form Responses 1. You will see that a new column has been added with our new question, “What country do you live in?”, and Australia selected.

Google Sheet Form Response Updated

Creating a Geo Chart in Google Sheets

Before we create our chart, populate it with a few examples using the Forms preview so you can see what your Geo chart will look like.

It’s okay. I’ll wait…

Okay Cool. So in your Form Responses 1 Sheet tab you should have something like this:

To create the Geo Chart select column C and click on the Chart icon. Change the chart type to Geo chart.

This looks pretty good out of the box. But between the max range and the min range the country will be shaded white…just like the background. That’s not going to work. Go in to the Customize tab and select the Geo drop-down. There will be an option to change the mid range color. I reckon orange is a nice mid colour so I’ll go with that.

This is looking betting, but we could really highlight the map with a bit of blue in the oceans. In the Chart Style drop-down change the background to blue (or what ever you want. I won’t judge).

That looks pretty tight.

Creating a Geo Chart in Google Sheets

Next create a new Sheet tab named CountryChart then copy the Geo Chart and paste it into cell A1. We will reference this cell later to select our chart when putting it into WordPress. You will have to go back and delete the original chart in Form Responses 1 because it wont delete even with a cut and paste.

Google sheets Geo Chart Completed

Embedding Your Google Sheets Geo Chart into Your WordPress Post

In our Part 2 of Google Forms in WordPress with Live Chart Project we learnt how to embed a chart that updates every 30 seconds without having to refresh the page.

We are going to add our Geo Chart to this so it does the same thing. I suggest you head back to that tutorial if you want more information. Right now though just click on the CountryChart sheet and select the Spreadsheet ID and the Sheet ID and paste it into the following code:

Google Sheets URL data

The Template

<iframe id="chart" width="600" height="371" seamless frameborder="0" scrolling="no" src="https://docs.google.com/spreadsheets/d/<<SPREADSHEET ID HERE>>/htmlembed/sheet?gid=<<SHEET ID HERE>>&range=A1"></iframe>

The Example

<iframe id="chart" width="600" height="371" seamless frameborder="0" scrolling="no" src="https://docs.google.com/spreadsheets/d/1M0aM1Piau7dZF6Sbny73pFbFc45UQvSVDlMBEDgESM8/htmlembed/sheet?gid=1276589844&range=A1"></iframe>

Now, if you have been following along from the previous parts of this tutorial, go into your WordPress post and locate your Form and result Chart and select Text and scroll to the HTML.

Select the HTML fragment above and add it into your code in your WordPress post just above the <script> element you used to run the 30 second iframe refresh. See line 3 below.

Great! You should now have your Geo Chart added to your WordPress post.

Take a squiz at the end result:



 

 

That’s it. Done. Looks pretty nifty, huh?

So, what do you think? Reckon you are going to use this in your own project? Go any cool ideas for application? Let me know in the ocmments below.

~Yagi

Multiple Cell Data and Formula Reference With Find and Replace – Google Sheets

One of my biggest regrets when I first got started with Google Sheets and spreadsheets in general, was not taking full advantage of Find and Replace.

Find and Replace is the penicillin of the the Spreadsheet world. It can rapidly cure all sorts or issue with a simple set of commands. It is seriously amazing stuff.

Yeah! Yeah! We all know about Find and Replace.

I know! I thought so too, but then I started to really use and identify how I could use it to quickly:

  • Change template sheets.
  • Fix bulk errors in formulas.
  • Change parts of cells.
  • Replace values in the whole spreadsheet, one sheet or a selected range.

Before we get started, you need to know the short cut for the Find and Replace tool. This will come in handy in all sorts of programs and apps.

  • PC – Ctrl + H
  • Mac – CMD (⌘) + H

I’m going to go ahead and continue the examples using PC, because, you know, Mac.

Continue reading “Multiple Cell Data and Formula Reference With Find and Replace – Google Sheets”

5 Easy Shortcuts That Will Save you Heaps of Time – Google Sheets

It’s time to get evangelical peep! Release yourself from the yolk of the menu bar and it’s insidious demands on you coordination and time!

Break free from the right click menu! For is it not anything more than a proxy menu bar?! A veritable wolf in sheep’s clothing with no other design but to bring you back to the fold of the menu-using, mouth-drooling reprobates  who stand in the way of efficient progress! Can I get an Amen! I said, can I get an Amen!

No? Fair enough…

Let’s just get on with it then, shall we? After all, this is about efficiency, right?

Here are the 5 main shortcuts that I use in Google Sheets each and every day to save me a tonne of time. I’m going to give you a bit more than just the Keyboard Shortcut, I’m going to demonstrate how I use it with some clear examples.

Continue reading “5 Easy Shortcuts That Will Save you Heaps of Time – Google Sheets”

Google Apps Script – Copy Selected Columns in One Sheet and Add Them To The Bottom of Different Selected Columns in Another

I recently had a legend (a.k.a reader) ask about how to copy selected columns from one sheet and append them to the bottom of different selected columns in another sheet. 

To me, this seemed like a pretty common task that one might face, so in response I decided to create a template function to easily do this and reuse on the same project or in other projects. 

But first, let’s take a look a the problem a bit more. 

We want:

  1. the freedom to select any number of columns from one sheet.
  2. to select the same number of different columns from the sheet we want to paste to.
  3. to paste to the bottom (append) the receiving sheet.
  4. to take into account varying header row heights.
  5. to have a “Completed” or “Copied” column in our origin sheet so that we don’t continue to paste all the data instead of simply what has been updated.
  6. have the data with formulas that we only want to paste the values for.

The Example

Let’s say we have a sheet that is updated regularly and we want to be able to paste data from columns A,B and C of this source sheet and append it to columns C,E and A of the destination Sheet. 

  • Copy Sheet 1 Col A -> Append Sheet 2 Col C
  • Copy Sheet 1 Col B -> Append Sheet 2 Col E
  • Copy Sheet 1 Col C -> Append Sheet 2 Col A

Take a look at our two Google Sheets 

SourceSheet - Google Sheets
DestinationSheet - Google Sheets

You can see in the Source Sheet (Sheet1) that we have 3 data columns and one column market To Copy. The To Copy column will be updated with “Copied” once the code is run successfully.

In the Destination Sheet (Sheet2) you can see that we already have some data there. We don’t want to overwrite it. We simply want to append our data to the bottom of it. 

Continue reading “Google Apps Script – Copy Selected Columns in One Sheet and Add Them To The Bottom of Different Selected Columns in Another”

Google Apps Script – How to Change the File Name of Non-Native Files like MS Word Docs, PDF’s and Excel files.

Google Apps Script, DriveApp

I had an unexpected need to change some non-native file names – in my case, MS Word docs – to something else to appease my masters. Being the resident Igor, I delighted in the task. 

The Problem

I had a folder of MS Word documents on my Google Drive that needed to all be renamed. They all needed the same name with an index number to distinguish that they were different files. 

There were, however other file types in the folder. 

The problem with non-native files in Google Drive is that it’s a little tricky to find their ID. Besides I just wanted to change ALL files that were MS Word in the folder. 

What I would need to do is search for all files inside my selected folder that are of MS Word type and rename them with the same name but with a counter at the end. For example:

Old File NameNew File Name
boring.doccranberrySauce.doc
sad.doc cranberrySauce1.doc
yawn.doc cranberrySauce2.doc
Continue reading “Google Apps Script – How to Change the File Name of Non-Native Files like MS Word Docs, PDF’s and Excel files.”

Instagram Diaries 3 – Day One and My First Pics

If  you missed Part 1 of the Instagram Diaries – how it all began – you can click here!

The cat’s out of the bag! Mrs Yagi got wind of what I was doing and read my first article on the Instagram Diaries.  So much for that secret-not secret rant in the last post. Ha!

Day One of posting was a challenging day. I had some choices to make. Do I start uploading photos of my most recent vacation or do I start at the very beginning of the photos from my phone all the way back in 2016?

Those first photos happened to be taken on a trip to Egypt and there were trips to Australia, Jordan, Sri Lanka, Thailand and Romania that I could add as well ( Oh Yagi! You place dropping hussy!). I like the idea of starting from the beginning for two reasons:

  1. I wouldn’t have to scramble for pictures now. Instead I could pick the best from what I had and slowly release them 1 to 3 a day.
  2. When else am I going to look at these photos? I reckon I am like almost everyone else and take photos for the sake of taking photos and never really go back on a trip down memory lane. 

First Pic Away

Awh yeah! Cool! I remember that little guesthouse with perfect views of the Pyramids, I thought. 

Continue reading “Instagram Diaries 3 – Day One and My First Pics”

Instagram Diaries 2 – Creating and Instagram Business Account, Getting the Perfect Username and Profile Image

If  you missed Part 1 of the Instagram Diaries – how it all began – you can click here!

Well, here we go.

One of the benefits of not being 20 year old me is that I am a little more cautious and less willing to trust my abilities in favor of listening to successful people and following their advice. 

Okay, I fess up. I am more likely to research and take others peoples advice more than I did twenty years ago. There!!! Is that okay? Jeez!!!

So the gurus of Instagram, those twenty-teen titans, were telling me that I should either upgrade my current Instagram account or create a new account.

Hmm… the though of updating my personal Instagram account and dicking around with all sorts of marketing tests did not seem fair to the few friends who bullied me into joining Instagram against my will in the first place.

Plus I got a bit of a confession to make…

Continue reading “Instagram Diaries 2 – Creating and Instagram Business Account, Getting the Perfect Username and Profile Image”

Instagram Diaries 1 – Getting Started

This might just be my midlife crisis! The start of my bumbling adventure on #Instagram

This might just be my midlife crisis!

A little over a month ago I turned 40. I could tell I was going to hit the big four-oh because of all the aches and pains that take longer and longer to deal with than they used to. 

On top of that, the new workload got hard. I mean real hard. I’m used to pulling 10+ hour days once or twice a week, but this year, it’s been every single day.

I know I needed a side project that was fresh and light. I needed a break from the coding and spreadsheets. Like any bloke in his midlife crisis, I needed to go out here and hit the latest young thing in a sad and desperate effort to rekindle my youth. 

That young thing, I thought, would be Instagram. Now, I know Instagram is no baby, but we need to to talk comparatively here. I’m on that slow rise to the “Old Fart” zone and five years older than 90% of the demographic

So to prove my youth one last time (maybe), I set out to learn what I could about Instagram. What I didn’t expect was the utter amount of information, and a lot of it data driven too! I was really starting to warm to the idea.

Continue reading “Instagram Diaries 1 – Getting Started”

Google Apps Script – How to Create Folders in Directories with DriveApp

Google Apps Script – DriveApp

Well, it’s  a rainy day here travelling in Romania, so time for a post.

coding in Romania
Relaxing in a cafe in Cluj Napoca, Romaina on a Rainy. I love this country!!!

When creating a Google Apps Script’s I often find I am creating new folders and files in specific locations on Google Drive after, say, generating a report or something.

A Note on Folders in Google Drive

All files and folders in Google Drive are allocated a unique key that identifies them.

Google Drive Folder ID

The file location and all the data about the file is mapped to this ID. This means you can have as many folders or files with the same name even in the same directory without a duplicate error being thrown because they all have their own unique ID for their URL.

Getting Started

More often than not, I know the parent folder that I want to put my sub folders in. This means I can get the parent folder’s ID and use that as my starting point to add sub folders. To do this we use the DriveApp class.

Below are three useful functions for creating folders.

  • Simple – Create a folder under the Parent folder ID – Duplicates are not checked and there can be multiple sub folders with the same name but all have their own  unique id.
  • Medium – Create a folder only if that folder name does not exists in the Parent folder – No folder is created if the folder already exists.
  • Hard-ish – Create a folder. If the name exists, add a counter to the name – If the file already exists then add a counter to the end of the file name.

All the functions will take two arguments: folderID – the unique id of the parent folder and folderName – the name you want to call your new folder.

The start() function will simply grab the two variables for the folderID and folderName and run the folder creation function. This is to simulate using the functions in your code.

Feel free to read what you need. I try and write these for a wide range of coding skill in mind.

Continue reading “Google Apps Script – How to Create Folders in Directories with DriveApp”

Google Apps Script – Getting Input Data From a Dialog Box in Google Sheets

Google Apps Script, Jquery, Javascript, HTML

One of the weekly tasks in my day job as an academic administrator is to look at a number of ‘modules’ or courses that our college is running and complete some analysis and crosschecking. Each week the students complete a ‘unit’. However, during some quarters, not all modules are doing the same unit. Before I can run my code I need to determine what modules are running and what units we are up to for me to run my automated code.

To do this I created a dialog box when the code is run from the add-on bar. In a few clicks, I can then choose the relevant modules and units and then run the selected code.

Let’s take a look at what the dialog box looks like:

Dialog Form in Google Apps Script

Upon “Submit”, the dialog box returns an array  of objects of checked values from the radio buttons that can be uses in the server-side Google Apps Script.

In this tutorial we will look at the following :

Continue reading “Google Apps Script – Getting Input Data From a Dialog Box in Google Sheets”