Random blog posts
Page Content hide
1 Welcome to Desktop Liberation

Welcome to Desktop Liberation

The definitive resource for Google Apps Script and Microsoft Office Automation

I am a Google Developer Expert and decided to investigate Google Apps Script in my spare time.

The more I investigated the more content I created so this site is extremely rich. Now, in 2019, a lot of things have disappeared or don’t work anymore due to Google having retired some stuff. I am however leaving things as is and where I came across some deprecated stuff, I have indicated it.

I decided to write a book about it and to also create videos to teach developers who want to learn Google Apps Script. If you find the material contained in this site useful, you can support me by buying my books and or videos.

You can navigate the content of the site by clicking on the main categories located on the menu, by selecting a category on the right or by using the search button.

For those who prefer book and eBook formats, a 450+ page deep dive into Apps Script. Especially useful for those transitioning from another platform. All formats are available from O'Reilly, Amazon and all good bookshops. You can also read a preview on O'Reilly
An accelerated video course over about 8 hours and 70 lessons taking you through JavaScript and Apps Script from start to finish. Available at O'Reilly, Infinite Skills and all good media outlets
A video course over about 8 hours and 70 lessons taking you through the basics of Apps Script and JavaScript . Available at O'Reilly, Infinite Skills and all good media outlets.

This site and its community aims to help you use cloud based APIS and services without being constrained by your desktop software. There’s a particular emphasis on Google APIs and JavaScript, but there’s also plenty of Microsoft and other stuff here too. All code here is unprotected and free to re-use.

Since the creation of this website, I have noticed that the below topics are by far the most popular*

JSON and Excel. Using VBA classes that emulate JavaScript objects, parsing and stringifying JSON and dealing with data from external services. Includes a data driven REST-EXCEL library, and implementation of Google oAuth2 authenticationD3.js is a brilliant javaScript library for building complex interactive visualizations. Here’s how to create them straight from Excel Data without needing to know any javaScript, as well as some non-Excel examples.
MAPS and Earth.Integrating Excel with Google Maps and Google Earth, including geoCoding, automatically building data driven web based apps from Excel data, and all things Geo.From VBA to Apps Script. Migrating from VBA to Google Apps Script, or using them simultaneously can be hard to get started with. Although this material has been largely superceded by Going Gas, there’s stll some useful stuff here.

The 7 topics below are the most recently published

Going Gas Abridged extracts from my book – Going Gas: from VBA to Apps Script. Featuring examples of the new Execution API.Goa authentication. An Apps Script library that takes care of authentication to a number of services such as Google, Microsoft, Github and others.
Going Serverless. How Firebase and Firebase cloud functions can help you go serverless, and forget all about the messy business of infrastructure configuration and maintenanceA collection of Google Apps Script/JavaScript snippets.I add a new one every now and again. A good place to start if you just want to get a feel for Apps Script, ranging from simple to esoteric and obscure
Integrate VBA projects with GitHub. An automated way of managing your VBA code, creating documentation on the fly, getting it to GitHub and creating workbooks directly from GitHub VBA code.Google Cloud Platform. Assorted GCP (Google Cloud Platform) topics and how tos.
Integrate VBA with JavaScript. Run JavaScript code directly in VBA using JS libraries on the Internet, or created locally. Opens up great possibilities for using Open Source code in VBA

For the geeky out there, those are the 4 most geeky things I have written about

Promises and Excel.Using promises in JavaScript and other languages is the preferred way to orchestrate the completion of asynchronous activities. Here’s a (not perfect but fun) Promise implementation in VBA. Example includes getting data from Google Fusion tables.Color Mathematics.The mathematics of color is a complex and interesting topic. Here you’ll find Google Apps Script, VBA and javascript examples of color manipulation including finding the closest match to a given color in a defined color scheme, and the infamous heatmap doughnut chart.
React,Redux,Redis,Material-UI and Firebase. A whole bunch of front end platform libraries that go together really well, but that are hard to grasp and get started with. Here’s a bunch of snippets to help show how all these things interact..Automatic VBA documentation and creation of apps script skeletons.Automating document ,creating Google Visualization and static tables of VBA projects, serialize instances of VBA classes and generating Google Apps Script skeleton of VBA projects.

Content preview

2018 – yet another year in and out of Google Apps Script

For some years now I’ve been writing this annual summary around Christmas time, on how my year in Apps Script has been. I’m very late this year, but it’s been a pretty busy one both […]

0 comments

Apps Script Back end platform – some thoughts on a different approach

Apps Script runs on Google Servers, probably the Rhino JavaScript  engine running on Google App Engine. Rhino is written in Java and the implementation used by Apps Script seems to be at about ES5.1, which […]

1 comment

Is it still worth creating blogposts ?

I’ve considerably cooled on the whole blogging thing over the years, preferring to post either to communities, github, to my tutorial site or my YouTube channel, or to work on more substantial resources, such as books or […]

0 comments

How about free VM for Chromebook owners?

I’ve been using a Chromebook for a few years now, and find myself going for long stretches without needing to turn on a Windows machine or an Apple Mac. At first, I was a little […]

0 comments

2016 – Another year in Apps Script

2016 The real world of 2016 has been full of madness, badness and sadness. It’s impossible to reflect on its events without thinking of the divisiveness, nastiness and mean-spiritedness that we’ve all seen, and I […]

0 comments

App Maker – Build engaging custom apps on G Suite with minimal coding

What is App Maker App Maker provides a ‘low code’ way to create professional looking G Suite custom apps without having to try too hard. You can drag and drop widgets on a form canvas, […]

0 comments

Using an Apps Script webapp to distribute assets

I wasn’t completely satisfied with the distribution method for the assets associated with my first Apps Script book and subsequent video course. Most of the assets were Apps Script files, and the delivery method was via […]

0 comments

Change from project key to scriptid

The Apps Script Script service is deprecating the getProjectKey() method. At this time it’s not clear when or why, but it does mean that if you are using the project key to create Oauth2 redirect […]

0 comments

What I’ve learned from my first play around with BigQuery/Sheets integration

So this just happened. BigQuery integration with Sheets!. This is great; now you can use a spreadsheet as a federated datasource for BigQuery, and therefore query (and join with other massive datasets) your spreadsheet data […]

0 comments

Targeting training material for Google Apps Scripters

Google Apps Script is the script language for Google Apps. If you are an Office user, think VBA, but in the cloud, with all the connectivity and share-ability that brings, and as an added bonus, […]

0 comments

A belated post – 2015 – a year in Apps Script

I’ve more or less stopped using blogger this year – looking back I’ve only made 6 posts since my end of 2014 post summarizing that year. Instead, I’ve been continuing to focus on  desktop liberation […]

0 comments

Null should mean something

It’s a common pattern in JavaScript to do this to assign a default value to a variable :

In other words, if someThing has a ‘falsey’ value (false, null , undefined , ” ,0) […]

0 comments

Running JavaScript directly from Excel makes ‘going Google’ easier

I’ve been dong a lot of writing over on Desktop Liberation looking at techniques to run Apps Script/JavaScript code directly from VBA, In this post I’m going to talk about how useful this can be if […]

0 comments

GitHub and VBA integration

If you develop shared code for VBA, you’ve probably got some massive workbooks that contain multiple projects that you wish you could separate, but it’s too complicated because they are sharing classes and functions. The […]

0 comments

Some best practise notes on DbAbstraction usage

    Since we have a lot of operations going through the database abstraction libraries nowadays (over 3 million since I released this in summer last year),  I thought I’d give a few hints. I’ll […]

0 comments

First shot at Polymer

I’ve just completed my first Polymer app and have mixed feeling about the experience. Regulars to this blog and the associated site know that I’m a great fan of Google stuff and like to try out […]

0 comments

A year in the desktop liberation blog

I posted the other day in A year in apps script and my bucket list my take on what happened in the Google Apps Script world in 2014, and my hopes for 2015. As many of you […]

0 comments

A year in apps script and my bucket list

2014 has been an eventful year for Google Apps Script with some great new capabilities arriving (add-ons), as well some useful ones (ScriptDB) being deprecated. In this post I’ll cover my highlights and lowlights of […]

0 comments

Google Apps Script locking and optimum wait times and the golden ratio

You are probably familiar with the Google Apps Script Lock Service, which is a way of preventing concurrent access to sections of code. It works well, but the problem is that it’s a fairly blunt […]

0 comments

How many requests a second can you throw at your Google Apps Script webapp

There was a question on the Google Apps Script Community the other day. It went something like this. This is an important question, because if you have a webapp, potentially used by many people – […]

0 comments

Apps Script server side to client side htmlservice progress reporting using CacheService

I’ve published a few examples of this in other projects (for example Implementing a client side progress bar reporting on server side work for htmlService) but I got a request from someone on LinkedIn to […]

sharing scrviz data studio report

Data Studio connector for scrviz – finally connecting it up

This series of articles will work through how to create a connector for Data Studio in Apps Script. For an introduction into the structure I’ll be following see Creating a connector for Data Studio and for a […]

Coding a connector for Data Studio (without using data studio)

This series of articles will work through how to create a connector for Data Studio in Apps Script. For an introduction into the structure I’ll be following see Creating a connector for Data Studio This article […]

scviz datastudio report

Creating a connector for Data Studio

This series of articles will work through how to create a connector for Data Studio in Apps Script. The source data will be the github apps script project catalog from Every Google Apps Script project on […]

vizzycache project

Finding the scriptId from Apps Script projects on github

In Every Google Apps Script project on Github visualized  I demonstrated an app that could be used to explore what every Apps Script developer who has shared their code is working on. One of the features […]

created formulas with fiddler

A fourth way to preserve and create formulas with Fiddler for Sheets, plus some more new methods

This is (probably) the last in a series of posts describing how Fiddler for Sheets can be used to help with formula manipulation and creation, as well as column insertion and deletion without caring too […]

fiddler

A third way to preserve formulas with fiddler, plus 2 new methods

In 2 ways to create and preserve formulas with fiddler for Google Apps Script I gave some examples of how to preserve formulas if you are using fiddler for Sheets. Fiddler does have a number of […]

apps script v8

Proxy implementation of Apps Script GraphQL Class

In Resuscitating the Apps Script execution transcript – JavaScript Proxy and Reflect to the rescue I showed how we could use the ES6 Proxy global object to intercept calls to Apps Script services so we could […]

fiddler preserving and creating formulas

2 ways to create and preserve formulas with fiddler for Google Apps Script

I’ve had a few queries from fiddler users about how to deal with formulas. Fiddler is primarly for abstracting spreadsheet values so they can be manipulated and updated without worrying too much about the physical […]

exchange apps script foriegn currency

Currency exchange rates library for Apps Script – optimized for the parsimonious – swop.cx

There are quite a few exchange rate APIs out there to get the latest and historic exchange rates. Google used to have a nice, simple and free one – the finance API, but that was […]

exchange apps script foriegn currency

Sheets Workbook functions in Apps Script – Filter functions

This article will cover the translation of the Sheets workbook filter type functions for  Apps Script. All of them will be covered. Motivation If you are handling data from sheets it might be useful to […]

apps script v8

Resuscitating the Apps Script execution transcript – JavaScript Proxy and Reflect to the rescue

If you’ve been using Apps Script for a while, since back when it was running on the Rhino JavaScript emulator; see (What JavaScript engine is Apps Script running on?), you’ll remember the Execution Transcript. This […]

apps script v8

ES6 Symbols – what on earth is all that about ?

javaWhen I first read about Symbols coming to JavaScript, I couldn’t figure out what the point was or even what they were, so I just kind of parked it. Lately I’ve been doing some work […]

Sheets Workbook functions in Apps Script – Database functions

This article will cover the translation of the Sheets workbook database type functions for  Apps Script. All of them will be covered. Motivation If you are handling data from sheets it might be useful to […]

sql joins in apps script

SQL for Apps Script – it’s here

While working on Sheets Workbook functions – converted to Apps Script I realized that I’d need to tackle the query language at some point, so I figured I may as well go the whole hog […]

Sheets Workbook functions in Apps Script – Array functions

This article will cover the translation of the Sheets workbook Array type functions for  Apps Script. Most of them will be covered, except for a few exotic ones that I might do later if anybody […]

apps script drive pile of files

Getting ‘a pile of files’ from Google Drive with Apps Script

The method for doing this is actually part of the bmFolderFun library documented in A handier way of accessing Google Drive folders and files from Apps Script but it can be really useful for keeping […]

Supercharging copying files between Drive and Cloud Storage from Apps Script with Cloud Run

In Blistering fast file streaming between Drive and Cloud Storage using Cloud Run I showed how you could use Cloud Run to hand off transfers between Drive and Cloud Storage to make them faster and […]

apps script v8

A handier way of accessing Google Drive folders and files from Apps Script

The usual way to access files and folders on Drive from Apps Script is via their ID, yet on other platforms we’re more used to using file and folder paths. This can be a bit […]

copt between drive and gcs

Blistering fast file streaming between Drive and Cloud Storage using Cloud Run

A friend of mine hit an Apps Script problem the other day when transferring large amounts of data between Drive and Cloud Storage. We’ve all had the mysterious ‘unexpected Javacript runtime error’ from the IDE […]

Sankey diagrams direct from Excel – update

Being able to create Sankey Diagrams in D3 directly from Excel continues to be one of the most popular topics on the Excel Liberation site even though I first posted this a long time ago now. […]

0 comments

Exploring blogs and sites by d3 tag visualization and effect on site visits

Here’s the daily visits to the Excel Liberation site over the past couple of years. But what’s that over the past 3 weeks, starting 3rd June ..a 40% sudden increase that seems to be sustaining. On […]

0 comments

Google Fusion Big Data and D3 integration: flight data visualization

In Flight Data from Fusion I introduced integration between Google Fusion and D3.js. This next version fixes up a few issues to do with Google Fusion API quotas and limits (see exponential backoff and jquery promises), and […]

0 comments

jQuery promises and exponential backoff

When using services like Google Fusion API, sometimes you get errors because of over quota attempts – too many requests in too short a time, or the infrastructure is just too busy to service them. […]

0 comments

Playing around with Tableau Public

With Tableau, you can do loads of visualizations very simply and publish them on “tableau public”. I never tried Tableau before, so I downloaded the tableau public software to play around with. The other day, […]

0 comments

Visualization of Sites to Tags with d3.js

When we explore a web site, the usual view is that of a tree structure of pages. I wondered if it could be done instead using topics. Which topics are mentioned on a given page? […]

0 comments

Create biased random test data in VBA

Today’s post is a quick function for creating biased randoms from a list of items and weights. You might need this to create some test data, where the outcomes are not completely random.   Example […]

0 comments

Digest authentication and Google Apps Script

The other day I was looking around for an example of how to do digest authentication in Google Apps Script (or even plain javascript). I found plenty of theoretical discussions on it, but no actual […]

0 comments

parse.com and d3.js mashup

Today’s post pulls together a number of concepts I’ve been playing around with lately. As usual my source data and post theme is based on data associated with color schemes – pantone, paint colors etc […]

0 comments

Connections in electoral data – D3 and VBA follow on from oUseful post

Yesterday I showed how to do some data wrangling in VBA and Google Apps Script that Tony Hirst on his oUseful blog had done using scraperwiki, Open refine plus various APIs. Today he posted a quick analysis using […]

0 comments

Mashing up electoral data – follow on from oUseful post

I just saw a great post by Tony Hirst on his oUseful blog where he nicely laid out how to use Open refine plus various APIs to research which candidates were standing for election in […]

0 comments

Finding nearest match and other palettes in other fixed color schemes

Color scheme UI I posted about a color scheme explorer app the other day. Given a specific color, it will find – in a given color scheme such as dulux paint colors, the nearest 5 […]

0 comments

Parse.com and ScriptDB performance comparison

Lately I’ve been doing a lot of posts to do with messing around with color. I’m using a selection of technologies such as scriptDB, Parse.com, jQuery promises, Google Apps Script, Google Spreadsheets, Google Visualization API and […]

0 comments

More playing around with color, parse.com, scriptDb and Google Apps Script

API for comparing colors I continue to find the topic of comparing colors a fascinating one. As an experiment to see if I could create a REST API serving up JSON and JSONP from a […]

0 comments

Very interesting GAS performance results – run locally using htmlservice

A little while ago, I published an item on GAS performance, showing that a complex calculation test would take about 100 times as long on GAS as the same thing in regular javascript running locally […]

0 comments

Executing Google Apps Script Code directly in javascript – GAS as a CDN

As you know the language of Google Apps Script is javaScript. So you probably have a lot of useful code buried away there, that could be used in web apps. One solution is to copy […]

0 comments

Google Apps Script “execution time exceeded” woes

Just how slow is Google Apps Script ? I’m a big fan of Google Apps Script, but I’m really fed up of seeing “Execution time exceeded”. Obviously data access times can be unpredictable, and although it […]

0 comments

Google Apps Script Color Space Conversions.

In Google Apps Script Color functions I introduced a bunch of functions to manipulate various color spaces from GAS. This was a migration from the same thing in VBA. I extended this to include additional color […]

0 comments

Automatic documentation from VBA – including function arguments

In documenting VBA procedures automatically I showed how to create web pages that documented your VBA projects. I’ve updated that now to also include a popup showing the detail of function arguments too. This page was automatically […]

0 comments

Using jSon/javaScript like structures in VBA

jSon /VBA functions have always been the most popular topic on the Excel Liberation site and forum. The interesting part about this though is not so much about parsing and stringifying jSon data (which after all is […]

0 comments
Full site map here