Google Apps Script para abrir una URL

¿Hay alguna manera de escribir un script de aplicaciones de Google para que, cuando se ejecute, se abra una segunda ventana del navegador en www.google.com (u otro sitio de mi elección)?

Estoy tratando de encontrar una solución a mi pregunta anterior aquí: ¿Puedo agregar un hipervínculo dentro de un cuadro de mensaje de una hoja de cálculo de Google Apps?

Puede construir una IU pequeña que haga el trabajo así:

function test(){ showURL("http://www.google.com") } // function showURL(href){ var app = UiApp.createApplication().setHeight(50).setWidth(200); app.setTitle("Show URL"); var link = app.createAnchor('open ', href).setId("link"); app.add(link); var doc = SpreadsheetApp.getActive(); doc.show(app); } 

Si quieres ‘mostrar’ la url, simplemente cambia esta línea así:

  var link = app.createAnchor(href, href).setId("link"); 

EDITAR: enlace a una hoja de cálculo de demo en modo de solo lectura porque demasiadas personas siguen escribiendo cosas no deseadas … haga una copia para usar.

EDITAR: !! UiApp fue depreciado por Google el 11 de diciembre de 2014, este método podría fallar en cualquier momento y necesita actualizarse para usar el servicio HTML. !!

EDITAR: a continuación se muestra una implementación que utiliza el servicio html.

 function testNew(){ showAnchor('Stackoverflow','http://stackoverflow.com/questions/tagged/google-apps-script'); } function showAnchor(name,url) { var html = ''+name+''; var ui = HtmlService.createHtmlOutput(html) SpreadsheetApp.getUi().showModelessDialog(ui,"demo"); } 

Esta función abre una URL sin requerir interacción adicional del usuario .

 /** * Open a URL in a new tab. */ function openUrl( url ){ var html = HtmlService.createHtmlOutput('' // Offer URL as clickable link in case above code fails. +'Failed to open automatically. Click here to proceed.' +'' +'') .setWidth( 90 ).setHeight( 1 ); SpreadsheetApp.getUi().showModalDialog( html, "Opening ..." ); } 

Este método funciona al crear un cuadro de diálogo temporal, por lo que no funcionará en contextos en los que no se pueda acceder al servicio de UI, como el editor de scripts o una fórmula G Sheets personalizada.

Google Apps Script no abrirá automáticamente las páginas web, pero podría usarse para mostrar un mensaje con enlaces o botones en los que el usuario podría hacer clic para abrir las páginas web deseadas.

Vale la pena señalar que UiApp ahora está en desuso. Desde Class UiApp – Google Apps Script – Google Developers

Obsoleto. El servicio de UI quedó en desuso el 11 de diciembre de 2014 . Para crear interfaces de usuario, use el servicio HTML en su lugar.

El ejemplo en la página vinculada al Servicio HTML es bastante simple,

Code.gs

 // Use this code for Google Docs, Forms, or new Sheets. function onOpen() { SpreadsheetApp.getUi() // Or DocumentApp or FormApp. .createMenu('Dialog') .addItem('Open', 'openDialog') .addToUi(); } function openDialog() { var html = HtmlService.createHtmlOutputFromFile('index') .setSandboxMode(HtmlService.SandboxMode.IFRAME); SpreadsheetApp.getUi() // Or DocumentApp or FormApp. .showModalDialog(html, 'Dialog title'); } // Use this code for the older version of Sheets. function onOpen() { var menu = [{name: 'Open', functionName: 'openDialog'}]; SpreadsheetApp.getActive().addMenu('Dialog', menu); } function openDialog() { var html = HtmlService.createHtmlOutputFromFile('index') .setSandboxMode(HtmlService.SandboxMode.IFRAME); SpreadsheetApp.getActive().show(html); } 

Una versión personalizada de index.html para mostrar dos hipervínculos

 Stack Overflow 
Meta Stack Overflow

La única diferencia entre estos dos:

  • var link = app.createAnchor (‘abrir’, href) .setId (“enlace”);
  • var link = app.createAnchor (href, href) .setId (“enlace”);

es que en el primer caso el enlace mostrará “abrir” en el cuadro de diálogo. Hasta ahora no he encontrado la forma de abrir automáticamente el enlace … (ver https://developers.google.com/apps-script/class_anchor ).

La única otra forma de abrir un documento automáticamente parece ser:

var doc = DocumentApp.openById (foundFile.getId ());

pero entonces no estoy seguro de qué se debe hacer con el doc. Es decir, no hay doc.show () …