Installable triggers and unpublished add-ons

As described in Setting up onChange trigger and When test add-ons doesn’t work you can’t install a trigger in test mode. The solution is to use your add-on as a library to a container bound script till you’re finished testing, then remove those links when ready to publish.

Like this

Setting up container bound script for testing

Once you’ve created a sheet and a script to go with it, you’ll need this code in it.

function onOpen(e) {

      .createMenu("testing addons")
      .addItem('Sheets efx demo', 'showViz')
function showViz () {

  var ui = SheetEfxDemo.libGetUi();

// this is needed here as it will be called by the addon
* used to expose memebers of a namespace
* @param {string} namespace name
* @param {method} method name
function exposeRun(namespace, method, argArray) {
  var global = this;
  var func = namespace ? global[namespace][method] : global[method];

  if (argArray && argArray.length) {
    return func.apply(this, argArray);
  } else {
    return func();
//expose library stuff that'll be accessed by the addon
var Server = SheetEfxDemo.Server;
var efxChanger = SheetEfxDemo.efxChanger;

Here the add-on is called SheetEfxDemo and it is included it as a library to the container bound script. The exposeRun function enables  calling namespaces from and the other stuff is adding a menu item to call the add-on, so it now looks like this

For more like this, see Google Apps Scripts snippets

Find out more about Pushing Changes from Google Sheets server to client here