2012-05-24 357 views

Respuesta

21

Se puede construir una pequeña interfaz de usuario que hace el trabajo de esta manera:

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 desea a 'show' de la URL, simplemente cambiar esta línea como la siguiente:

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

EDIT: link to a demo spreadsheet en lectura solo porque demasiada gente sigue escribiendo cosas no deseadas ... haga una copia para usar.

EDIT: !! 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. !!

EDIT: a continuación es una aplicación utilizando el servicio de html.

function testNew(){ 
    showAnchor('Stackoverflow','http://stackoverflow.com/questions/tagged/google-apps-script'); 
} 

function showAnchor(name,url) { 
    var html = '<html><body><a href="'+url+'" target="blank" onclick="google.script.host.close()">'+name+'</a></body></html>'; 
    var ui = HtmlService.createHtmlOutput(html) 
    SpreadsheetApp.getUi().showModelessDialog(ui,"demo"); 
} 
+1

Agregué su función a mi hoja de cálculo, la ejecuté y no hizo nada. La parte superior de la hoja de cálculo muestra "ejecución de prueba de secuencia de comandos" seguida de "prueba de secuencia de comandos finalizada", pero no pasó nada. Traté de reemplazar esa línea con la línea adicional que proporcionó, pero fue el mismo resultado. –

+0

La interfaz de usuario aparece en la ventana de la hoja de cálculo, ¿puede decir qué navegador está utilizando o si ya ha utilizado otros ejemplos de la interfaz de usuario en las hojas de cálculo? –

+0

He intentado Chrome e IE8 –

0

La única diferencia entre estos dos:

  • enlace var = app.createAnchor ('abierto', href) .setId ("link");
  • var link = app.createAnchor (href, href) .setId ("link");

es que en el primer caso el enlace se mostrará "abierto" 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 manera de abrir un documento automáticamente parece ser:

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

pero no estoy seguro de lo que debe hacerse con doc! Es decir. no hay doc.show() ...

3

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

Vale la pena señalar que UiApp ahora es obsoleto. De Class UiApp - Google Apps Script - Google Developers

Obsoleto. El servicio de IU era deprecated on December 11, 2014. Para crear interfaces de usuario, use el HTML service en su lugar.

El ejemplo de la página HTML Servicio vinculado 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 índice.html para mostrar dos hipervínculos

<a href='http://stackoverflow.com' target='_blank'>Stack Overflow</a> 
<br/> 
<a href='http://meta.stackoverflow.com/' target='_blank'>Meta Stack Overflow</a> 
3

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

/** 
* Open a URL in a new tab. 
*/ 
function openUrl(url){ 
    var html = HtmlService.createHtmlOutput('<html><script>' 
    +'window.close = function(){window.setTimeout(function(){google.script.host.close()},9)};' 
    +'var a = document.createElement("a"); a.href="'+url+'"; a.target="_blank";' 
    +'if(document.createEvent){' 
    +' var event=document.createEvent("MouseEvents");' 
    +' if(navigator.userAgent.toLowerCase().indexOf("firefox")>-1){window.document.body.append(a)}'       
    +' event.initEvent("click",true,true); a.dispatchEvent(event);' 
    +'}else{ a.click() }' 
    +'close();' 
    +'</script>' 
    // Offer URL as clickable link in case above code fails. 
    +'<body style="word-break:break-word;font-family:sans-serif;">Failed to open automatically. <a href="'+url+'" target="_blank" onclick="window.close()">Click here to proceed</a>.</body>' 
    +'<script>google.script.host.setHeight(40);google.script.host.setWidth(410)</script>' 
    +'</html>') 
    .setWidth(90).setHeight(1); 
    SpreadsheetApp.getUi().showModalDialog(html, "Opening ..."); 
} 

Este método funciona mediante la creación de un cuadro de diálogo temporal, por lo que no va a funcionar en contextos donde el servicio de interfaz de usuario no es accesible, como el editor de script o una fórmula personalizada G Sheets.

+0

Gracias por el truco. Lo probé sin suerte :(Utilicé un menú personalizado y probé el guión en Mozilla. Y el guión abrió una nueva pestaña con esta URL: 'about: blank'. –

+1

@MaxMakhrov de hecho lo hace! Acabo de actualizar el código con una solución. Parece que los clics programáticos han sido problemáticos durante mucho tiempo en Firefox, pero ahora la secuencia de comandos muestra de manera confiable la posibilidad de "No se ha podido abrir" en Firefox y ofrece al usuario un enlace funcional. –

Cuestiones relacionadas