1
votes

I'm currently developing a Google Apps Script Application and I want to add a UI with the OnOpen-Function. But the problem is, that the OnOpen-Function is only working as an Addon or as a binded script to the Spreadsheet or Doc-File.

My Question is how can I run the Apps Script Code as a standalone application for new added files?

I tried it so far with time-based trigger, but app script is creating too many triggers. Is there a better way to trigger the onOpen-Function for new added Files?

Here is my code so far:

function tim(){
    ScriptApp.newTrigger("createSpreadsheetEditTrigger")
   .timeBased()
   .everyMinutes(1)
   .create();   
}


function createSpreadsheetEditTrigger() {
  var files = DriveApp.getFoldersByName("Development Lab").next().getFoldersByName("AppsScriptProgramm").next().getFoldersByName("Excel").next().getFiles();

  while (files.hasNext()){
    file = files.next();  
    ScriptApp.newTrigger('onOpen')
      .forSpreadsheet(SpreadsheetApp.openById(file.getId()))
      .onOpen()
      .create();
  }
}

function onOpen() {
  SpreadsheetApp.getUi() 
      .createMenu('Metadata')
      .addItem('Open', 'openDialog')
      .addToUi();
}

function openDialog() {
  var html = HtmlService.createHtmlOutputFromFile('Index')
      .setSandboxMode(HtmlService.SandboxMode.IFRAME)
      .setWidth(900)
      .setHeight(400);
  SpreadsheetApp.getUi()
  .showModalDialog(html, 'Metadaten zum Dokument: '+ SpreadsheetApp.getActive().getName());
}
1
do not call it onOpen. ie onTriggerOpen - Zig Mandel

1 Answers

0
votes

Simple way is using IF statement;

    function tim(){
    ScriptApp.newTrigger("createSpreadsheetEditTrigger")
   .timeBased()
   .everyMinutes(1)
   .create();   
}

Will become;

function tim(){
var triger1 = ScriptApp.newTrigger('createSpreadsheetEditTrigger').timeBased().everyminute(1).create();
if (triger1 <2){triger1
   }
}

Haven't tried it though.