2012-05-24 28 views

risposta

21

si può costruire una piccola interfaccia utente che fa il lavoro in questo modo:

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); 
    } 

Se si desidera a 'show' l'url, basta cambiare questa linea, come questo:

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

EDIT: link to a demo spreadsheet in lettura solo perché troppe persone continuano a scrivere cose indesiderate su di esso ... fare una copia da usare.

MODIFICA: !! UiApp è stata ammortizzata da Google l'11 dicembre 2014, questo metodo potrebbe interrompersi in qualsiasi momento e deve essere aggiornato per utilizzare il servizio HTML. !!

MODIFICA: di seguito è un'implementazione che utilizza il servizio 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

Ho aggiunto la funzione al mio foglio di calcolo, l'ho eseguita e non ha fatto nulla. La parte superiore del foglio di calcolo mostra "test dello script in esecuzione" seguito da "test dello script finito" ma non è successo nulla. Ho provato a sostituire quella linea con la linea aggiuntiva che hai fornito ma era lo stesso risultato. –

+0

L'interfaccia utente viene visualizzata nella finestra del foglio di calcolo, puoi dire quale browser stai utilizzando o se hai già utilizzato altri esempi di interfaccia utente nei fogli di lavoro? –

+0

Ho provato Chrome e IE8 –

0

L'unica differenza tra questi due:

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

è che nel primo caso il collegamento mostrerà "aperto" nella finestra di dialogo. Finora non ho trovato alcun modo per aprire automaticamente il collegamento ... (vedi https://developers.google.com/apps-script/class_anchor).

L'unico altro modo per aprire automaticamente un documento sembra essere:

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

ma poi non sono sicuro di cosa si dovrebbe fare con doc! Cioè non c'è doc.show() ...

3

Google Apps Script non aprirà automaticamente le pagine web, ma potrebbe essere utilizzato per visualizzare un messaggio con collegamenti o pulsanti che l'utente potrebbe fare clic su di essi per aprire il Web desiderato pagine.

Vale la pena notare che UiApp è ora obsoleto. Da Class UiApp - Google Apps Script - Google Developers

Obsoleto. Il servizio di interfaccia utente era deprecated on December 11, 2014. Per creare le interfacce utente su , utilizzare invece HTML service.

L'esempio nella pagina HTML servizio legato a questo è abbastanza semplice,

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 versione personalizzata di indice.html per mostrare due collegamenti

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

Questa funzione apre un URL senza richiedere interazione supplementare dell'utente.

/** 
* 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 ..."); 
} 

Questo metodo funziona con la creazione di una finestra di dialogo temporanea, in modo da non lavorare in contesti dove il servizio di interfaccia utente non è accessibile, come ad esempio l'editor di script o una formula personalizzata G Fogli.

+0

Grazie per l'hack. L'ho provato senza fortuna :(Ho usato un menu personalizzato e testato lo script in Mozilla e lo script ha aperto una nuova scheda con questo URL: 'about: blank'. –

+1

@MaxMakhrov sì! Ho appena aggiornato il codice con una correzione. Sembra che i clic programmatici siano stati a lungo problematici in Firefox, ma ora lo script mostra in modo affidabile il fallback "Impossibile aprire" in Firefox e offre all'utente un collegamento funzionante. –

Problemi correlati