Desktop Liberation

The definitive resource for Google Apps Script and Microsoft Office automation

  • Home
    • About Desktop Liberation
    • Reusing code from this site
    • My Public GAS Library
    • Privacy and Usage Policy
    • Sitemap
  • Blog
    • Access all published posts
  • Downloads
  • APIS
    • Google API
      • Slides
      • Chrome
      • Docs
      • Drive
      • Execution
      • KnowledgeGraph
      • People
      • Sheets
    • Microsoft API
      • OneDrive
    • REST
    • Video Intelligence
    • Vimeo
    • Vision
  • Apps Script & Java Script
    • Apps Script v8
    • Add-ons
    • Javascript
    • From VBA to Google Apps Script
    • Office JavaScript API
    • Snippets
  • Cloud Platform
    • BigQuery
    • Cloud Functions
    • Firebase
    • Kubernetes
    • Google Cloud Platform
    • Google Cloud Storage
  • Databases
    • BigQuery
    • CockroachDB
    • Database abstraction
    • Elastic
    • Firebase
    • GraphQL
  • Office & VBA
    • From VBA to Google Apps Script
    • Optimization
  • Elastic
  • Full Stack
  • GraphQL
  • Kubernetes
  • Node.js
  • Redis- Vuejs
Random blog posts
  • [ October 16, 2019 ] Looping through files in a directory VBA
  • [ July 15, 2019 ] Use a spreadsheet as a database in 5 minutes Microsoft Office & VBA
  • [ June 13, 2019 ] 2019 – a decade in Apps Script Yearly posts
  • [ February 7, 2019 ] 2018 – yet another year in and out of Google Apps Script Yearly posts
  • [ September 22, 2017 ] Apps Script Back end platform – some thoughts on a different approach Apps Script & Java Script
  • [ August 3, 2017 ] Is it still worth creating blogposts ? Yearly posts
  • [ March 3, 2017 ] How about free VM for Chromebook owners? Docker
  • [ December 28, 2016 ] 2016 – Another year in Apps Script Yearly posts
  • [ December 1, 2016 ] App Maker – Build engaging custom apps on G Suite with minimal coding AppMaker
  • [ August 19, 2016 ] Using an Apps Script webapp to distribute assets Apps Script & Java Script
  • [ August 4, 2016 ] Change from project key to scriptid Apps Script & Java Script
  • [ May 13, 2016 ] What I’ve learned from my first play around with BigQuery/Sheets integration BigQuery
  • [ April 13, 2016 ] Targeting training material for Google Apps Scripters Apps Script & Java Script
  • [ March 14, 2016 ] A belated post – 2015 – a year in Apps Script Yearly posts
  • [ November 6, 2015 ] Null should mean something Apps Script & Java Script
  • [ June 25, 2015 ] Running JavaScript directly from Excel makes ‘going Google’ easier Javascript
  • [ March 24, 2015 ] GitHub and VBA integration GitHub
  • [ February 6, 2015 ] Some best practise notes on DbAbstraction usage Database abstraction
  • [ January 21, 2015 ] First shot at Polymer Deprecated
  • [ January 4, 2015 ] A year in the desktop liberation blog Yearly posts
  • [ January 1, 2015 ] A year in apps script and my bucket list Yearly posts
  • [ December 12, 2014 ] Google Apps Script locking and optimum wait times and the golden ratio Apps Script & Java Script
  • [ September 22, 2014 ] How many requests a second can you throw at your Google Apps Script webapp Apps Script & Java Script
  • [ July 24, 2014 ] Using universal analytics to track your Google Apps Script library usage Apps Script & Java Script
  • [ May 29, 2014 ] Parse.com as a substitute for ScriptDB in Google Apps Script Apps Script & Java Script
  • [ May 16, 2014 ] Eurovision song contest voting oddities – interactive visualization Google Visualization
  • [ May 1, 2014 ] Universal analytics – really hotting up Google Analytics
  • [ March 17, 2014 ] I’ve just been recognised as a Google Developer Expert Yearly posts
  • [ February 6, 2014 ] Google Universal Analytics – getting insight into desktop apps too Microsoft Office & VBA
  • [ February 5, 2014 ] More cool stuff you can do with Google Apps ScriptDb Apps Script & Java Script
  • [ January 27, 2014 ] Are the new Google Sheets faster than the old? Sheets specific
  • [ January 8, 2014 ] Google Apps Script Content Service – Cross Domain Puzzle Apps Script & Java Script
  • [ January 1, 2014 ] Get post data from Blogger into a google Spreadsheet with the Google Blogger API Sheets specific
  • [ December 30, 2013 ] Blog posts’ half life – why bother? Analytics
  • [ December 13, 2013 ] Accessing parse.com and scriptDB noSQL databases from Excel Databases
  • [ December 3, 2013 ] Dealing with Unix timestamps in Excel Microsoft Office & VBA
  • [ November 28, 2013 ] Shared Encryption/decryption library for Google Apps Script. Apps Script & Java Script
  • [ November 20, 2013 ] Tracking your Excel Workbooks with Google Analytics Google Analytics
  • [ November 15, 2013 ] Mitigating for changes in REST API rules and formats Microsoft Office & VBA
  • [ October 30, 2013 ] XML and JSON conversion in VBA Json
  • [ September 30, 2013 ] Excel custom functions that can lookup data in Google Apps Script ScriptDB From VBA to Google Apps Script
  • [ September 27, 2013 ] REST access to list management cloud based functions – plus a VBA example Microsoft Office & VBA
  • [ September 19, 2013 ] Validation and lookups using shared scriptDB lists scriptDB
  • [ September 1, 2013 ] Pinyin Tone converter – Google Apps Script custom functions Apps Script & Java Script
  • [ August 9, 2013 ] What does Google Autocomplete show all over the world ? Google Search
  • [ August 6, 2013 ] Google Docs to Excel Asynchronously Docs
  • [ July 9, 2013 ] Using ScriptDB as a noSQL database for non-Google Apps Script clients Databases
  • [ July 3, 2013 ] Concept browser for site navigation with d3 Apps Script & Java Script
  • [ July 1, 2013 ] Sankey diagrams direct from Excel – update Microsoft Office & VBA
  • [ June 26, 2013 ] Exploring blogs and sites by d3 tag visualization and effect on site visits Apps Script & Java Script
  • [ June 18, 2013 ] Google Fusion Big Data and D3 integration: flight data visualization D3
  • [ June 18, 2013 ] jQuery promises and exponential backoff Apps Script & Java Script
  • [ June 5, 2013 ] Playing around with Tableau Public D3
  • [ June 3, 2013 ] Visualization of Sites to Tags with d3.js D3
  • [ May 28, 2013 ] Create biased random test data in VBA Microsoft Office & VBA
  • [ May 21, 2013 ] Digest authentication and Google Apps Script Apps Script & Java Script
  • [ May 14, 2013 ] parse.com and d3.js mashup D3
  • [ May 8, 2013 ] Connections in electoral data – D3 and VBA follow on from oUseful post ScraperWiki
  • [ May 6, 2013 ] Mashing up electoral data – follow on from oUseful post ScraperWiki
  • [ April 30, 2013 ] Finding nearest match and other palettes in other fixed color schemes Colors
  • [ April 24, 2013 ] Parse.com and ScriptDB performance comparison Colors
  • [ April 19, 2013 ] More playing around with color, parse.com, scriptDb and Google Apps Script Apps Script & Java Script
  • [ April 15, 2013 ] Very interesting GAS performance results – run locally using htmlservice Apps Script & Java Script
  • [ April 10, 2013 ] Executing Google Apps Script Code directly in javascript – GAS as a CDN Apps Script & Java Script
  • [ April 3, 2013 ] Google Apps Script “execution time exceeded” woes Apps Script & Java Script
  • [ April 2, 2013 ] Google Apps Script Color Space Conversions. Apps Script & Java Script
  • [ March 30, 2013 ] Automatic documentation from VBA – including function arguments Microsoft Office & VBA
  • [ March 25, 2013 ] Using jSon/javaScript like structures in VBA Json
  • [ March 23, 2013 ] VBA procedures for CIE LabLch and HSL color scheming Colors
  • [ March 14, 2013 ] Playing around with Color on Google Apps Script Apps Script & Java Script
  • [ March 13, 2013 ] Example of automatic code updating for VBA VBA
  • [ March 12, 2013 ] VBA string manipulation optimization with custom classes Microsoft Office & VBA
  • [ March 8, 2013 ] Inherit link colors from cells – D3 sankey from Excel Microsoft Office & VBA
  • [ March 6, 2013 ] Strings and the garbage collector in VBA : optimizing string concatenation VBA
  • [ February 28, 2013 ] API of the Day: facebook fql direct from Excel and Google APPs API Specific
  • [ February 23, 2013 ] Adventures in serializing VBA classes – automatically documenting your modules Microsoft Office & VBA
  • [ February 20, 2013 ] Unused tube stations: discovered via scraperwiki- mapped with Excel and Google Maps Integrating Excel with Maps and Earth
  • [ February 18, 2013 ] Scraperwiki horsemeat data to Sankey, via Excel. Microsoft Office & VBA
  • [ January 21, 2013 ] ‘Hot doughnut’ chart in Excel Colors
  • [ January 11, 2013 ] Can you make any adSense money with a blog ? adsense
  • [ January 10, 2013 ] Calculating a friendly font color based on the fill color – Google Apps Script Colors
  • [ January 7, 2013 ] I’m awarding badges – Google Apps Script integration with Persona and Mozilla Openbadges Badges
  • [ December 20, 2012 ] Playing around with awarding badges on sites Badges
  • [ December 9, 2012 ] Getting physical again No category
  • [ December 8, 2012 ] Selecting and publishing a function from a web source Apps Script & Java Script
  • [ December 7, 2012 ] Publish and prettify source directly from a url Apps Script & Java Script
  • [ December 2, 2012 ] Zoomable d3.js partition charts straight from Excel D3
  • [ November 22, 2012 ] Select, prettify publish snippets in multiple languages from within a GIST module Apps Script & Java Script
  • [ November 22, 2012 ] Selecting specific Gist and GAS functions for publication Apps Script & Java Script
  • [ November 20, 2012 ] Publishing and prettifying Gists through google apps script Apps Script & Java Script
  • [ November 17, 2012 ] Using Google Cache to persist data across function calls Apps Script & Java Script
  • [ November 12, 2012 ] Google Apps Script Liberation – publishing your stuff Apps Script & Java Script
  • [ November 6, 2012 ] Publishing Google Apps Script code snippets Apps Script & Java Script
  • [ November 5, 2012 ] Google Apps Script – a new day – a new feature Apps Script & Java Script
  • [ November 2, 2012 ] Delegating processing to the cloud from Excel and other platforms Apps Script & Java Script
  • [ November 1, 2012 ] Keeping all those Google Apps script ‘shortcuts’ under control Apps Script & Java Script
  • [ October 31, 2012 ] Somewhere to keep those API keys: google apps script rest library entry Apps Script & Java Script
  • [ October 31, 2012 ] API library entry of the day: use builtwith.com to see how websites are built Apps Script & Java Script
  • [ October 30, 2012 ] Shortening a string, but keeping it unique: Google Apps Script Caching Keys Apps Script & Java Script
  • [ October 29, 2012 ] Google Caching and faking jsonp Apps Script & Java Script
  • Twitter
  • Github
  • Youtube
  • Gitter
  • Slideshare
  • LinkedIn
HomeRamblingsHomeSitemap

Sitemap

  • Apps and Office bakeoff
    • Add-ons versus add-ins
  • Apps built with data abstraction
    • Accessing Google Sheets directly from Excel
    • Database access to a variety of databases from Excel
    • Get Data from Google Books
    • Get Data From Google Docs
      • Get data from the old Google sheets
    • pollHandler app and library
  • Apps for Office
    • OneDrive API
  • Apps Script
    • Apps Script Add-ons
      • Chord Snip
      • Color Arranger
      • Debugging Office JavaScript API add-ins
      • Dicers
      • Dicers Pro and advanced features
      • Measure round trip and execution time from add-ons
      • Merging slide templates with tabular data
      • Office Add-ins – first attempt
      • Orchestrating competing google and Office framework loads
      • Plotting maps with overlays Sheets add-on starter
      • Polyfill for Apps Script properties service for the Office JavaScript API
      • Promise implementation for Apps Script Stripe payments
      • Repeatable add-on settings layouts and style
      • Sankey Snip
      • Sheets API – Developer Metadata
      • SlidesMerge add-on
      • Unpicking the Google Picker
      • Watching for changes in an Office add-in
      • When test add-ons doesn’t work
    • Apps Script v8
      • Apps Script V8: Arraybuffers and Typed arrays
      • Apps Script V8: Arraybuffers and Typed arrays, endianness and views
      • Apps Script V8: Keystore for global space
      • Apps Script V8: Maps and Sets
      • Apps Script V8: Multiple script files, classes & namespaces
      • Apps Script V8: Provoke server side code from add-ons and htmlservice
      • Apps Script V8: spreading and destructuring
      • Apps Script V8: Template literals
      • JavaScript V8 Arrow functions, this and that
      • JavaScript V8 variable scopes
  • Array formulas – doing lots of things at once
    • Array formulas and large ranges
    • Array formulas and sumproduct
    • Array Formulas Introduction
    • Bit Twiddling
      • Sudoku constraints
    • Leveraging sorted data with Match
    • Optimizing the array formula
    • The birthday problem
  • Automatic documentation
    • Step by step module updating
  • Blog2019
  • Chrome
    • Tracing
      • Chrome Tracing class for VBA
      • Chrome Tracing Example
      • ChromeTrace library
  • Classes
    • Classes: Introduction
    • Data Abstraction with cDataSet
      • Procedures, properties and methods
    • Data Manipulation Classes
      • cCell Class
      • cDataColumn
      • cDataRow
      • cDataSet
      • CDataSets
      • cHeadingRow
      • Copying and filtering worksheets and Excel tables
      • Data Abstraction Example
      • Get Data from Outlook
      • How to use cDataSet
        • cDataSet Model
        • Clear data cells with cDataSet
        • How to make a table from a cdataset
      • Tables and listobjects
    • Promises in VBA
      • asynch ADO using promises
      • Complex aynchronous web services
      • Exponential backoff with VBA promises
      • SetTimer and VBA
      • VBA promise implementation
  • Color Fiesta
    • Alternative ramp layout
    • Alternative schemes
    • Color Schemes and palettes
    • Create a heatmap in Excel
      • Charts and color ramps
        • How to create a heatmap doughnut chart
      • Color ramp library
        • Creating one color ramp from another
    • Excel dress up doll
    • Find nearest color match
    • Looking up color table
    • Playing around with colors in VBA
    • Ramping color swatches
    • Selection of pantone ramps
    • Visualizing tables
  • Complete Apps Script Applications
    • BigQuiz app
      • Big quiz score reports
      • BigQuery and the Execution API
      • Configurable circular timer with D3
      • Example of clock using d3 configurable timer
      • Firebase custom authentication with goa
      • Firebase JSON REST access library for Apps Script
      • Quick doughnut and pie charts with a radial timer
      • Sharing code between client and server and using libraries with html service
      • Using the People API with Apps Script
  • Contact
  • d3.js
    • Centering text in arc textpath with D3
    • Creating d3.js Tree diagrams
    • cv-viz: Virus infection simulation with D3.js
      • Coronavirus-d3.js viz: Detecting and dealing with collisions in force simulations
    • Eurovision results with crossfilter and dc.js
    • Excel tables to d3.js Force diagram
      • Adding markers to d3.js force diagrams
      • Developer information for d3.js force diagrams
    • Flight data from Fusion
    • HTML service without caja
    • Making sense of joins in D3
    • Sankey diagram from Excel
    • Zoomable Partition Charts
  • Database abstraction and Google Apps Script
    • Back end performance linearity
    • Backing off on rate limiting
    • Comparing all back ends performance
    • Copying data between various drivers
    • Creating a driver
    • Database caching
    • DataHandler
    • DataHandler REST API
    • Datastore driver
      • All about locking
      • datastore driver code
      • DataStore quotas
      • Migrate data from scriptDb to Datastore
      • Relative performance
    • Dealing with constraints
    • Driver DbAbstraction
    • Driver Import.io
    • Driver MongoLab
    • DriverDrive
    • DriverFusion
    • DriverMemory
    • DriverOrchestrate
    • DriverParse
    • DriverProperties
    • DriverScratch
    • DriverScriptDb
    • DriverSheet
    • How to write a driver
    • JSON API for data abstraction classes
    • Keys and data format
    • Library for rest API
    • Migrating from Parse.com to MongoDB
    • Or operations
    • Release notes
      • Db abstraction release notes 3rd March 2015 – v2.2
      • January 2015
    • RipDB – scriptDB emulator
    • Some test cases for various backends
    • VBA API using the Google Apps Script dbab library
    • Working with big caches
    • Working with transactions
  • Deduce column headings from rest Query
    • jquery promise snippet
    • Pixels needed to render a string
  • DektopLiberation
  • Delegation to Google Apps Script
    • Enhancing the urbarama mashup
    • Hosting your public scriptdb
    • Store data in scriptdb
    • Using the mcpher library in your code
  • Docker, appengine and the flexible environment
    • Deploying docker containers to appengine
    • Using Google Maps API with Google cloud functions
  • Download Complete Projects
    • Downloads
  • Downloads redirect
  • Drive SDK and GitHub
    • Drive JSON API for apps script
    • Gasgit – frictionless bulk maintenance of your Apps Script gitgub repos and integration with Clasp
    • Getting your apps scripts to Github
      • Easy reference for published scripts
      • Extracting the source from apps script project
      • Making sense of gwt rpc dependency service
    • Response format from apps script project query
    • Tracking github pageviews
    • Visualizing Apps Script dependencies
  • Dynamic Forms
    • Dynamic Event Handlers
    • Prettify dynamic grids
  • Ephemeral Exchange
    • A gigantic pub crawl
      • Controlling the demo
      • Examining the data
      • Mapping the demo
    • Apps Script library for Ephemeral exchange
    • Ephemeral exchange JSON editor and viewer
    • Merging data with a slides template
    • Migrating from App Engine to Cloud functions
    • Playing around with maps and streetview
      • Convert field of view to zoom and back again
      • Set initial streetview orientation towards a map marker
    • Pushing changes from Google Sheets server to client
      • Getting started with Ephemeral Exchange for push notification
      • Implementing fisheye projection with D3 for google sheets add-on
      • Initializing the server
      • Proof of concept Sheets navigation with D3 fisheye distortion and ephemeral exchange
      • Reacting to push notifications
      • Setting up onChange trigger
      • Testing unpublished add-on
    • Sheets and Maps collaboration with cache – effex demo
    • Sheets, Maps, Slides, Docs , Maps and Streetview, effex collaboration demo
    • Using an intention to update to preserve atomicity in cache updates
    • VBA library for Ephemeral exchange
  • Excel to json and back
    • A tagCloud in Outlook
    • cJobject deep dive
      • Access shortcuts
      • How to access children
      • Navigation
      • Storing objects as values
    • cJobject JSON serialization
    • Create a treeview from json
    • Data driven VBA apps with JSON
      • cJobject and javascript equivalents
      • Creating a workbook from JSON manifest
      • Creating the dashboard
      • Populating the worksheets from bitcoin api
      • Scheduling updates with task scheduler
    • Delegating xml to json conversion to GAS
    • Excel JSON conversion
    • How to create a tag cloud
    • How to populate Excel from jSon
    • How to use cJobject
    • JSON stringify VBA classes
    • Rest Results Explorer
    • Rest to Excel library
      • Adding to the rest library
      • Adhoc Rest Queries
      • Advanced rest library usage
      • Combining multiple rest queries
      • Fusion data to Excel
      • Getting data out of scraperWiki
        • Interesting scraperwiki scrapes
        • ScraperWiki mashup
      • JSON arrays of objects
      • Making excel tables of the results
      • Oauth2 and Excel-Rest library
      • Populating sheets with Rest responses
      • Urbarama mashup
      • Using cRest directly
    • Simple implementation of R- melt
    • Web Services
    • XML to JSON with VBA
  • Fancy Gadgets
    • Database abstraction of site results
    • Dynamic height github gadget for Google Site
    • Embedding feeds in google sites
    • Enhanced Github gadget
    • Getting analytics for the site
    • Getting the pages in the site
    • Light JSONP implementation
    • Matching the site tree to the analytics data
    • Retrieving page data from GAS web service
    • Storing options and parameters
    • Update analytics batch code and the 6 minute limit
    • Using a canvas in Google Sites gadget
  • GAS and Sites
    • Analyzing site content with GAS
    • d3 concept browser
    • D3 force from GAS Site
    • End to end analysis, Excel and explorer
    • Focus node explorer with d3.js
    • Node focus explorer without excel
    • Node focus on Blogger posts
    • Scheduling GAS
    • Site data to sheets
  • Get Started Snippets
    • Asynchronicity and Scheduling
    • Basic HTTP Authentication from VBA
    • Clean up Pivot Cache
    • Creating an index sheet for a workbook
    • Diminishing Returns
    • Excel Comment shapes
    • Formatting range addresses
    • Getting Started with argument passing
    • Getting started with recursion
    • Getting started with VBA
    • Getting Started with VBA Classes
    • How to add references by guid
    • How to embed gist samples in Google Sites
    • How to position a userform on the mouse
    • How to prevent unwanted web caching
    • How to simulate for each loop in javaScript
    • How to traverse a treeview
    • How to use the Excel Roadmapper
      • Implementation example of form at mouse position
      • jSon and Dynamic Forms
      • Scope and Namespaces
      • use cJobject to create a unique list
    • Looping through files in a directory
    • Make a copy of a worksheet
    • Make a copy of some of the columns in a worksheet
    • Make a filtered copy of a worksheet
    • One Liners
      • Coloring maps and other shapes
      • Create a list of unique values
      • Excel to Json and output to file
      • General copy and filter worksheet
      • How to identify and modify rows hidden by autofilter
      • Make a copy of a sheet and respect autofilter
    • Step by Step Guides
      • How to add flightPaths on a Map
        • How to use javaScript from VBA
          • How to pass arrays between javaScript and VBA
      • How to add quickLinks to a Map
      • How to control your vizMap application
      • How to define your vizMap application – Dictionary
      • How to define your vizMap Application – visualizations
      • How to filter markers by Category
      • How to Geocode addresses using Google Maps
      • How to modify geocoding and mapping parameters
      • How to Overlay circles on a Map
      • How to prepare for your vizMap application – Data
      • How to prepare for your VizMap application – Parameters
      • How to put markers on maps
      • How to use alternate Map icons
    • Understanding Scope
      • Objects and the garbage collector
    • Use Microsoft Speech
    • VBA rgb to htmlRGB
    • What to do if you get the “Object Library Invalid Error Message”
    • Which VBA references you are using
  • Going GAS
    • Adding abstracts to documents
    • Bulk search and replace images in Google Docs
    • Converting Google Docs table to JSON and back
    • Execution API and Office to Apps migration
      • Authentication and access
      • Final migration steps
      • Incremental migration
      • JSON and VBA
      • Migrating logic
      • Migrating orchestration
      • Reading and writing Sheets from VBA
      • Testing Javascript on the PC
      • VBA and Apps Script inventory
    • Hosting files on Google Cloud Storage
    • Using Object.create in Apps Script
  • Going Serverless with Firebase
    • Custom domains and ssl with Firebase hosting
    • Firebase cloud functions
    • Mapping custom domains to cloud functions
    • Rate limiting – Firestore and Firebase cloud functions
    • Using Google analytics as a database for api usage statistics
  • Google Analytics
    • Adsense on Google Sites
    • Embedding Google Analytics in your VizMap application
    • Extract the plus one counts from a page
    • Instrumenting VBA for Google Analytics
    • Universal analytics measurement protocol for your GAS libraries
      • Universal analytics for checking co-operating processes
  • Google Apps Script HTML service
    • Inviting members to Google Plus from Groups
    • Running things in parallel using HTML service
      • Dealing with rate limited services
      • Parallel implementation and getting started
      • Running GmailApp in parallel
      • Running parallel tasks as a web app
      • Running things in parallel that need oAUTH2 – datastore
      • Simulating multiuser testing
      • Some hints on setting up parallel running profiles
      • Testing locking and transactions
      • Testing parallel processing inline
  • Google Apps Script Publisher
    • Step by Step Gas Publisher
  • Google Apps Script snippets
    • A functional approach to fiddling with sheet data
    • A functional approach to updating master sheet
    • A recursive extend function for Apps Script
    • A webapp to share copies of the contents of folders
    • Abstracting services with closures
    • Add-on spinner
    • Addressing namespace and library methods from google.script.run
    • Anonymous user registration with the Apps Script PropertiesService
    • Apps for Office – binding example comparison
    • Apps Script as a proxy
    • Apps Script const scoping problems
    • Calculating image dimensions in server side apps script
    • Calculating the last day of a given weekday in the month
    • Canvasser
    • Chaining JavaScript
    • Changing class properties dynamically
    • Checking the argument types in Apps Script
    • Cleaning up a document format
    • Cleaning up heading levels
    • Column numbers to characters
    • Composing functions and functional programming
    • Configurable canvas meter
    • Convert JSON to XML
    • Converting SVG to PNG with JavaScript
    • Converting timestamps to dates formula
    • Copying canvas and svg images from your Add-on
    • Copying to new host location
    • Copying to new host location
    • Counting script and library usage
    • Create sha1 signatures with apps script
    • Creating a key digest to use for a cache key or to compare content
    • Creating a pile of files list from Google Drive
    • Creating and working with transposed sheet data arrays
    • Cross Origin Resource sharing (CORS)
    • CryptoJS libraries for Google Apps Script
    • Custom checking for exponential backoff
    • Data wrangling with named columns in Google Spreadsheet
    • Dealing with objects that are too large for the property or cache store
    • Detecting Spreadsheet tables automatically with Google Apps Script
    • Direction minimizer – other usages
    • Do something useful with GAS in 5 minutes
      • A simple invoice app
      • Copy databases using OAuth2
      • Copying databases
      • Fusion and crossfilter
      • Get analytics profiles in a sheet
      • Getting Analytics Pageviews into a sheet
      • Graduate to a database
      • Summarize email thread recipients to a spreadsheet
      • Use a spreadsheet as a database in 5 minutes
    • Dynamically creating tables with clusterize.js
    • EasyCron Library
    • ES6 JavaScript features
    • Exponential backoff
    • Exponential backoff for promises
    • Fiddler and rangeLists
    • Fiddling with text fields that look like dates
    • Filling ranges in Google Sheets
    • Finding a Drive App folder by path
    • Finding where Drive hosting is being used in Sites
    • Flattening an object with dot syntax
    • Flattening and unflattening objects to spreadsheets
    • Formatting GraphQL queries
    • Formatting sheet column data with fiddler
    • From notes to frequencies and back again
    • From Xml to JSON
    • Generating and managing random lists with JavaScript and Apps Script
    • Generating coupon codes with expiry dates
    • Generating test data for sheets and tables
    • Get GAS library info
    • Getting an htmlservice template from a library
    • Getting insights into Sheets performance
    • Google Drive as cache
    • Header formatting with fiddler
    • Highlight duplicate rows in a sheet – map and reduce
    • Highlight duplicate rows in a sheet – map, filter and every
    • How to determine what kind of object something is in Apps Script
    • How to get stats about youtube videos in your channel with apps script
    • How to pass non stringifyable objects to html service
    • How to transpose spreadsheet data with apps script
    • Identify duplicates on Drive
    • Identifying hosted files
    • Implementing a client side progress bar reporting on server side work for htmlService
    • Importing Predictwise data
    • Improved namespace pattern for Apps Script
    • Including the stack in custom errors
    • JavaScript closures – how, where and why
    • JavaScript currying and functional programming
    • JavaScript currying and functional programming – even more
    • JavaScript recursion primer
    • JSONP and JSON and Google Apps Script webapps
    • Loading large JSON datasets into BigQuery with Apps Script
    • Logging differences in strings in Apps Script
    • Measuring library load speed
    • Migrating user and script properties
    • Minimizing maps directionfinder api calls
    • More client server code sharing
    • More recursion – parents and children
    • More sheet data fiddling
    • Multiple inserts in Fusion Tables
    • Namespaces in libraries and scripts
    • Normalizing the header level of blank paragraphs
    • Optimizing sheet formatting with Apps Script
    • Optimizing showing and hiding rows and columns
    • Organizing asynchronous calls to google.script.run
    • Organizing parallel streams of server calls with google.script.run promises
    • Parallel process orchestration with HtmlService
    • Passing data to html service
    • Patching site html
    • Populating sheets with API data using a Fiddler
    • Proxy jsonp
    • Pseudo binding in HTML service
    • Queuing asynchronous tasks with rate limit and concurrency constraints
      • Qottle recipe: Managing asynchronous queues with duplicates
      • Qottle recipe: How to manage an asynchronous polling queue
    • Recursive async functions
    • Removing duplicate paragraphs
    • Reporting file, function and line number in Apps Script
    • Resumable uploads – writing large files to Drive with Apps Script
    • Reusing html stuff between Apps Script projects
    • Roughly matching text
    • Serving apps script to JavaScript app
    • Sharing code between client and server
    • Shortcut for adding nested properties to a JavaScript object
    • Simple server side polling
    • Sorting Google Sheet DisplayValues
    • Squeezing more into (and getting more out of) Cache services
    • Styling Gmail html tables
    • Summarizing emails to a sheet
    • SunCalc
    • TimeSimmer : An adjustable timer for apps that need to speed up or slow down time
    • Transform dates for add-on transfer
    • Transposing sheet data
    • Traversing a tree
    • Unique values with data fiddler
    • Unnesting data to sheet values
    • Untangling with promises
    • Use Drive properties to find app files
    • Use promise instead of callback for settimeout
    • Using Advanced Drive service to convert files
    • Using Apps Script for xml json conversion
    • Using array formulas to improve performance
    • Using crossfilter with Google Apps Script
    • Using D3 in server side Gas
      • Emulating worksheet functions in apps script with d3
    • Using es6 promises server side in Apps Script
    • Using Es6 with Apps Script
    • Using exponential backoff with github api – dealing with data “in preparation”
    • Using Google sheets via Bigquery from Apps Script
    • Using named locks with Google Apps Scripts
    • Using promises to orchestrate Html service polling
    • Using promises with apps script
    • Using the Itunes API with Apps Script
    • Using the slideshare API from Apps Script
    • Using timing functions to get insight into Sheets
    • Watching docs for changes
    • Watching for server side changes from the client html service
    • What JavaScript engine is Apps Script running on?
    • Why Base64
    • Zipping to make stuff fit in cache or properties service.
  • Google Apps ScriptDB
    • A VBA API for scriptDB
      • Creating your own scriptDB environment
      • cScriptdbCom client
      • GAS API for handler
      • Getting started with cScriptDbCom
      • Handler for cScriptDbCom requests
      • The scriptDB dispatcher
      • Trying out your new scriptDB environment
    • scriptDB API for JavaScript
      • Authenticating scriptDb JavaScript API
      • scriptDb JavaScript api examples
      • scriptdbcom implementation
      • Testing the API
  • Google Cloud Platform
    • Chunking promises using the Knowledge Graph API as an example
    • Cloud Storage and Apps Script
      • Enabling APIs and OAuth2
      • GcsStore examples
      • GcsStore overview – Google Cloud Storage and Apps Script
      • Google cloud storage and CORS
      • Setting up or creating a console project
      • Using the service account to enable access to cloud storage
    • Connecting to cockroachdb
    • Firebase auth for graphql clients
    • FTP server on Kubernetes with cloud storage and pubsub
    • Getting an API running in Kubernetes
      • Bringing up an ingress controller
      • Building your App ready for Kubernetes deployment
      • Creating a Kubernetes deployment
      • Creating a microservice on Kubernetes
      • Digging around on the Kubernetes cluster
      • Getting an ssl certificate for Kubernetes ingress
      • HTTPS ingress for Kubernetes service
      • Kubernetes ingress with cert-manager
      • Managing ssl for ingress certificates with cert-manager
    • Getting cockroachdb running on google cloud platform
    • Getting cockroachDB running with Kubernetes
    • Getting memcache up and running on Kubernetes
      • Creating a test app for memcache on Kubernetes
      • Exposing a memcache loadbalancer
      • Getting a simple app running on Kubernetes
      • Installing memcache with Kubernetes
      • Using mcrouter with memcached on Kubernetes
    • Google Cloud Run on Kubernetes
    • Google Video Intelligence API film labelling
    • Google Vision and OCR
    • Long running cloud platform operations and node apis
    • Making sense of OCR – Google Vision
      • Orchestrating APIS to structure and interpret OCR data
    • More cloud streaming
    • Orchestrating APIS to analyze OCR data
    • Queuing asynchronous tasks to defeat rate limits
    • Secure CockroachDB and Kubernetes
    • Securing Graphql with firebase login
    • Service account impersonation for Google APIS with Nodejs client
    • Stream content to Google Cloud Storage
    • Video transcription with Video Intelligence API
    • Your own free linux VM
  • Google Docs
    • Extracting images from a document
    • Getting started with pinyin helper
    • Large document performance
    • pinyin conversions
    • Sorting bookmarks in a document
  • Google Oauth2 VBA authentication
    • cOauth2 class implementation
    • Google docs import with oauth2
  • Google Visualization
    • Embedding Google Motion Charts in Excel
    • General Google visualization tool
    • Serializing Excel data for Google motion charts
    • University Rankings visualized
  • Guests articles and postings
    • Cloud print connector for Google Apps Script
    • Connecting Google Sheets to APIs, and building apps with Retool
    • Dealing with common VBA Oauth2 blockers in a corporate environment
    • Getting started with Google Cloud Datastore for Google Apps Script
    • How to Enable / Disable ‘Show Pictures’ in Internet Explorer
    • OAUTH2 and VBA
    • Practical use of React in 2020 – Udemy course
    • Search and filter email
    • Unviewable+ and Secure++
    • VBA obfuscation
  • How to update modules automatically in VBA
    • gistThat Idea
  • How to use Vue.js, Vuex and Vuetify to create Google Apps Script Add-ons
    • Browser tab visibility : adjusting add-on behavior
    • Handly helper for fiddler
    • Improve Vue.js Apps Script add-ons with a Vuex store
    • Including npm modules and Vue components: an htmlservice pattern for Apps Script add-ons
    • Optimize updates to Google Sheets with fiddler fingerprints
    • Rate limit handler and helper: Test and manage rate limiting APIS
    • Rate limit handler, helper and iterator: Apps Script use cases
  • Integrate VBA with Github
    • Getting started with VbaGit
    • Module reference list
    • VBA and jsdoc
  • Integrating Excel with Maps and Earth
    • Adding markers to Bing Maps from Excel
    • Adding markers to Google Maps from Excel
    • Adding markers to Ovi Maps from Excel
    • Adding markers to Yahoo Maps from Excel
    • Calculate lat/lon from distance
    • Complete Excel Address Data with Bing Maps API
    • Complete Excel Address Data with Google Mapping API
    • Complete Excel Address Data with Yahoo Placemaker Maps API
    • Data Driven Mapping applications
      • Creating a VizMap Application
      • GeoCoding Master Data
      • Joining transactions to master data
      • Vba to join master and transactional data
      • Vba Walkthrough – generating a vizMap application
        • Setting up VizMap VBA module
        • Vba to generate VizMap Application
      • VizMap Application Filename
      • VizMap Controlling Execution
      • VizMap Element positioning
      • VizMap javaScript
        • Creating VizMap framework without Excel
        • javaScript ‘howTo’
          • Click events in Google Earth
          • Creating a tabbed Google Mapping InfoWindow
          • Flying around with Google Earth
          • Using Google Earth
          • Using Google Maps
          • Using Google Visualization charts and tables
          • Using Google Visualization DataTables
          • Using Google Visualization DataViews
          • Using Twitter in Earth and Maps
        • Providing VizMap Data without Excel
      • VizMap Measures
      • VizMap Spot Settings
      • VizMap Tabs
    • Encoding client keys for Maps
    • GeoCoding
    • Mapping and adding markers to maps
      • Adding flight paths to Maps
      • infoBox for google Map popups
      • Overlaying circles and heatmaps
      • Quicklinks and Categories
    • Radians Versus Degrees
    • Tailoring Output
      • Tailoring the html body
      • Using css styles to tailor InfoWindows
    • Using Google Earth – creating KML files
    • VizMap Dictionary
    • Zooming and Bounds
  • Integrating Google Apps with other Platforms
    • Let Google Apps Script do the work
    • Using the Google Sheets V4 API from VBA to integrate Sheets and Excel
    • Using the Sheets API to make apps script respect filters
  • Integrating VBA and Javascript
    • Executing Apps Script with VBA
    • Local VBA versus JavaScript performance
    • Unit testing Apps Script ports from VBA
  • Learn how to transition from VBA to Google Apps Script
    • A simple Google Apps Script RestQuery
    • Advanced Array functions
    • Apps Script custom functions
    • Apps Script timer collection
    • Apps Script versus VBA scope
    • Automatic VBA to apps script skeleton
    • cJobject Class in Google Apps Script
    • classes and javaScript
    • Color from ScriptDB
    • Color Matching in GAS
    • Creating a Google Apps Script Library
    • Data manipulation Classes in Google Apps Script
    • Dealing with optional arguments
    • Finished Roadmapper Script
    • Generate an auto incrementing key with scriptDB
    • Google Apps Conversion approach
    • Google apps script Rest Library migration
    • Google Apps Script Roadmapper code
    • Google Apps Script VBA equivalents
    • Google Script Color Ramp
      • Color Ramp useful scripts
    • How to make charts in Google Apps Script
    • javaScript functions
    • Learning javaScript
    • Looping in Google Apps Script
    • Optimizing access to sheet values
    • Playing around with GAS color
    • Roadmapper migration
    • Scraperwiki data to Google Docs
    • Some Google Apps Scripts gotchas
    • Tracking activity with ScriptDB
    • Using scriptDB
    • VBA collection in javaScript
    • VBA debug object
    • What to use in place of Excel Shapes
  • OAuth2 for Apps Script in a few lines of code
    • Accessing as the user running the script
    • Adding custom services to goa
    • Asana service for Goa examples
    • Authentication dialog
    • Automatic UI support for OAUTH2 Goa dialogs
    • Converting and copying Google Apps files to Microsoft OneDrive
    • Get web credentials from downloaded file
    • Getting and using the token
    • Github service for Goa examples
    • Goa and the Classy API
    • Goa in a sidebar
    • Goa services and customization
    • GOA Setup
    • Goa v8 changes and enhancements
    • Google Apps Script Oauth2 for quickbooks with Goa
    • Google Apps Script Oauth2 for Vimeo with Goa
    • Google Datastore service for Goa examples
    • Google Datastore service for Goa using service account examples
    • Hitching a ride on Goa’s property store
    • How fast can you get OAuth2 set up in Apps Script
    • How OAuth2 works and Goa implementation
    • How to customize the consent screen
    • Microsoft Live service for Goa Examples
    • Migrating from cEzyOauth2
      • Trying to like OAuth2
        • auth2 authentication for podio
        • EzyOauth2 – taking some pain out of Apps Script API authentication
        • EzyOauth2 patterns
        • JSON web tokens
        • Multiple oAuth2 authentication packages
        • Oauth2 authentication for Asana
        • Oauth2 authentication for Microsoft OneDrive
        • Oauth2 authentication for podio
        • Oauth2 authentication for reddit
        • oAuth2 authentication for shoeboxd
        • Oauth2 step by step – apps script authentication for the Drive JSON API
        • Step by Step – Apps Script Oauth2 authentication with Github
        • Using Drive SDK from Google Apps Script
        • Using the gplus api in Apps Script
    • Multiple Goa consent dialogs
    • OAuth2 and the Paypal Rest API
    • Opting out of automatic token refreshes
    • Pattern for sidebars and dialog boxes
    • Podio service for Goa examples
    • Reddit service for Goa examples
    • Service account
    • Setting an alternative ontoken callback
    • Shoeboxed service for Goa examples
    • Some OAUTH2 walkthroughs
      • Borrowing an access token from Apps Scripts
      • Comparing Google and Microsoft – image emotion detection
      • Using a service account
      • Using OAuth2 when published as ‘user accessing the webapp’
      • Using OAUTH2 with a webapp published ‘as me’
    • Soundcloud service for Goa examples
    • Using multiple service accounts to work across projects and lock down permissions with Apps Script and Goa
  • Optimization
    • Advanced profiling: Rogue Use Cases
    • Automatic Profiling
    • Execution Time Logging
    • Introduction to Optimization
      • Countdown timer
    • Profiling user defined functions
      • cProcProfiler
        • destroyTimers method
        • Finish method
        • FinishProfiler method
        • Pause Method
        • Results method
        • Start method
        • StartProfiler method
      • cProcTimer
      • procProfilerWrapper module
        • procProfilerConstruct procedure
      • ptLevels enum
    • Strings and garbage
  • Orchestration of Apps Scripts – parallel threads and defeating quotas
    • Creating a work package
    • Jobs, work, stages, threads and chunks
    • Namespaces and App structure
    • The Orchestration namespace
  • Organizing Named Ranges
    • 3d Validation
    • Named Ranges
    • Named Ranges with Column Headings
  • Parallel processing in Apps Script
    • Converting from scriptb to parse.com – multiple simultaneous threads
  • Parse.com
    • Color scheme explorer
      • Code for color scheme explorer
      • Data from parse.com
      • Gas hosted scripts
    • Colorschemer API
    • Common query code
    • d3.js and parse mashup
    • Google Visualization API data
    • parse.com – noSQL database for GAS
      • cParseCom examples
      • cParseCom implementation
      • creating Parse Classes from Google Spreadsheets
      • Some simple examples
    • parse.com – nosql database for VBA
      • more complex parse API topics
      • parse.com api class for VBA
    • Query Limits on parse.com
    • Query parse.com from GAS
    • Query scriptDB from GAS
    • Updating parse.com
    • Updating ScriptDB
  • Performance
    • Measuring sheet operation performance
  • Polymer
    • Multi user apps script logger
    • Multi-user apps script logger
      • Dogger demo mode
      • Dogger settings
      • Logging multiple or detached processes to the same log
      • Setting up your Apps Script Environment for Dogger
      • Using a spreadsheet as a logger
      • Using cDogger library directly
  • Privacy and Usage Policy
  • Quirky Functions
    • Equation plots in Excel
    • Execute SQL from Excel
    • Respect a Filter with Sumproduct
    • Search
    • SumProduct
      • SumProduct – prioritizing lookups
      • Sumproduct Strangeness-2
    • Using match to categorize
  • Ramblings blog
  • RamblingsHome
    • About Desktop Liberation
    • Sitemap
  • React, Redux, Redis, Material-UI and Firebase
    • Creating promise actions in redux
    • Dealing with Appbars and drawers in React and Material-ui
    • Enabling clipboard copy in React
    • Firebase authentication with react and redux
    • Firebase service accounts on Node.js
    • Fixing out of sync server times
    • Local variables in Redis Lua scripts
    • Maintaining the selected row in a Material-UI table
    • My server times are out of sync!
    • Nice axis labels for React recharts using D3
    • Preserving TTL for redis item update
    • Promise routing in Express
    • Redis and Lua scripting
    • Use firebase instead of socket.io
    • Using a service account with Firebase in NodeJs
    • Using a snackbar with react and redux
  • Recursion
    • Getting to Grips with recursion
    • Hiding data in Excel Objects
      • Persistence of data for userforms
    • Roadmap Generation
      • Assigning Parents and Children
      • First Shapes
      • Roadmap Parameters
      • Sorting Collections
    • Sudoku Generator and Solver
      • Basic Solver
      • First Generated Puzzle
      • Generation
      • Implementing a countdown timer for the Sudoku project
      • Soak Test
  • Regular Expressions
    • Regex, scraping and visualizing
  • Reusing code from this site
  • Test Blog Page
  • Things that have been deprecated
    • Assigning badges to pages
    • Badge component summary
    • Badges
    • Big arrays and scriptDB
    • Blister custom functions
    • Blister validation code
    • Cookies and Excel
    • Creating badge environment from a spreadsheet
    • GAS lists and validation
    • Getting lists as a restquery
    • How to set up your own badge environment
    • Implementation progress
    • jQuery plugin for image special effects
    • Locking down scriptDB
    • Protecting email addresses
    • Qualifying for a badge
    • REST access to blister functions
    • Setting up blister lists
    • Using blister custom functions
    • Using data from multiple scriptDB
    • Using VBA to consume a rest blister query
  • Totally Unscripted
    • Keeping track of columns for onEdit triggers using sheets metadata
    • Polling and the Drive changes API
    • Sheets Developer Meta Data – Apps Script advanced service
    • Sheets Meta Data Advanced service library utilities
  • Vuejs, firebase, kubernetes, cockroachDB, google cloud platform and apollo graphQL
    • API rate limiting handling
    • Apollo graphql backend
    • Dynamically updating elastic indices after graphQL mutation
    • Elastic Search
    • Flattening arrays for Elastic Search
    • Vuejs
      • Vuejs and Vuetify – what does v-on mean

 

Book – Also available on Amazon
Video – Also available on Amazon
Video-For beginners
Connect with me
  • Twitter
  • Github
  • Youtube
  • Gitter
  • Slideshare
  • LinkedIn

bruce mcpherson is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. Based on a work at http://www.mcpher.com. Permissions beyond the scope of this license may be available at code use guidelines