![]() |
| Screenshot of popup informing user they are missing some permission |
I'm Phil Bainbridge and I aim to share my experiences of IT projects I've worked on as I continue to learn and develop, through this blog. My main coding language is Google Apps Script (with JavaScript), but there is also some: PowerShell, HTML, SQL and jQuery.
Tuesday, 1 September 2026
Verify all permissions granted in a Google Sheet script
Tuesday, 2 June 2026
Bulk assign Google AI licences without the Admin Console
The following Google Apps Script is designed to automate the assigning of a Google AI licence e.g. "Google AI Pro for Education" in the Google Admin Console, for individual accounts/users via a Google Sheet. The code also adds them to a particular Google Group which was used in this context to control access to Google AI Studio.
You can refer to the Google product and SKU IDs webpage if you need to assign a different licence type. There is no initial checking to see if they have an existing licence or are already in the Group, instead a try/catch is used to collate any failed users.
![]() |
| Snippet of code for bulk assigning AI licences |
Tuesday, 7 April 2026
Append Sheet data to a Doc with varying Table sizes
Tuesday, 10 March 2026
Granular OAuth consent in Google Workspace Add-ons
At the beginning of 2026 Google started to roll out granular OAuth consent for Workspace Add-ons with the view that it would improve the choice for end users when selecting permissions to run automated script. Unfortunately as end users are not typically aware of the inner workings of Google Apps Script (why would they?) the result is that sometimes they do not select all of the necessary permissions for an Add-on to function correctly when installing.
This leads to additional work for developers to handle enquiries and provide resources/instruction to overcome the issue. It can also result in reduced installations of an Add-on or negative feedback about it not working.
Tuesday, 18 November 2025
Google Form - cleanse question titles
The following Google Apps Script provides a way to help clean data submitted by a Google Form (via an 'onFormSubmit' trigger), specifically the question titles. We typically use the question titles in our Apps Script code to extract the specific values we want e.g. email address, name, etc. Doing so locks us into ensuring we copy the relevant question title explicitly as it is written in the Form, such as any upper/lower case characters and trailing whitespace. Any deviation from this and the automation will no longer work.
This specific piece of Apps Script has been created so that it can be easily dropped into the beginning of your existing code, to set the Form question titles all to lowercase and to remove any whitespace around them.
![]() |
| Google Form - cleanse question titles sample code |
Tuesday, 28 October 2025
Publish a Google Form to your domain
Tuesday, 19 August 2025
Get Google Form file upload links into a Google Doc
The following Google Apps Script aims to provide one way to solve the difficulty of passing Google Form data into a Google Doc, after the Form has been submitted, where you have a file upload question and you want a nice accessible link putting in the Google Doc rather than the long (unclickable) URL.
I have a specific blog post which focusses more upon the process of creating Google Docs from a Form submission.
![]() |
| Google Doc with Form data and accessible file links |
Tuesday, 10 June 2025
Collate and organise a large Sheet of data
The following Google Apps Script is designed to organise a large Google Sheet of data into a specific category and then populate a Google Sheet template file with it. In this example our main data consists of these columns:
- URLs
- Last Update Time
- Creator Email
- Owner Email
- Incompatibility Reason
![]() |
| Collate and organise a Sheet of data by Owner Email |
Tuesday, 13 May 2025
Create a dynamic Menu from content in a Google Sheet
The following Google Apps Script is designed to dynamically create a Menu in a Google Sheet, based specifically on the data within it. So rather than the typical process of creating a static Menu where you prescribe exactly which items go into it and the Functions to run, this script will generate the items each time the Sheet is opened and perform one universal Function: translating 'Hello' into a couple of different languages in this example.
This means you can add/remove items from your Sheet and the Menu will adjust accordingly (the next time you re-open it), without any need to go into the Apps Script Editor.
| Screenshot of Sheet popup showing translated text from data within the Sheet. |
Tuesday, 15 April 2025
Convert Sheet data into a JavaScript Object for easier handling
| Screenshot of Sheet data with Header rows |
Tuesday, 18 March 2025
Replace text in a Google Sheet with an image
| Screenshot of Google logo that has replaced text in a Google Sheet |
Tuesday, 18 February 2025
Assign Google Workspace licences for individuals without the Admin Console
| Screenshot of the Google Form title used for submission |
Tuesday, 14 January 2025
Check date in future and a Wednesday
| Google Form question asking for a date to be entered. |
Tuesday, 17 December 2024
Exponential Backoff
| Sample Apps Script code for Exponential Backoff |
Tuesday, 19 November 2024
Copy or move file into folder Tool
| Quickly copy or move existing files into folders via a Google Sheet |
Tuesday, 22 October 2024
Append Drive folder permissions Tool
| Quickly append new folder permissions via a Google Sheet |
Tuesday, 24 September 2024
Append Drive file permissions Tool
| Quickly append new file permissions via a Google Sheet |
Tuesday, 27 August 2024
Check comma separated email address is valid
| Regular expression to check the format of an email address |
Tuesday, 30 July 2024
Change Drive ownership without email notification
| Snippet of code for changing Drive ownership |






