2017-06-07 2 views
0

Ich habe ein Skript mit Hilfe von mehreren stackoverflow Beispielen codiert, aber ich bleibe stecken, wenn ich versuche, ein bisschen weiter zu gehen.Drop-Down-Werte in Google Tabellenkalkulation mit Google Skript

Es scheint sehr einfach, aber ich kann nicht scheinen, es auszuarbeiten.

Also hier ist es: Ich habe ein HTML-Skript, das eine Dialogbox mit einigen Dropdown-Menüs initiiert codiert. Die Daten in den Dropdown-Menüs sind dynamisch und stammen aus einem Bereich in einer Tabelle. Ich möchte, dass Benutzer die Tabelle öffnen, das Skript ausführen und die Optionen aus den Dropdown-Werten auswählen. Diese Dropdown-Werte werden in dieselbe Tabelle eingefügt.

Das Bit, das ich funktionierte, ist, dass der Code die Werte sieht, die in die Dropdown-Box gehen müssen, das veranschaulicht und dass es eine Submit-Box gibt.

Allerdings kann ich nicht scheinen, um die Werte in die Tabelle zu übermitteln. Könnte mir bitte jemand helfen oder mich in die richtige Richtung weisen?

test.gs

function openInputDialog1() { 
    var html = HtmlService.createHtmlOutputFromFile('Test').setSandboxMode(HtmlService.SandboxMode.IFRAME); 
    SpreadsheetApp.getUi() 
    .showModalDialog(html, 'Add Item'); 
} 


function getMenuListFromSheet() { 
    return SpreadsheetApp.getActive().getSheetByName('Part Names') 
    .getRange(1,5,6,1).getValues(); 
} 

function getThicknessFromSheet(){ 
    return SpreadsheetApp.getActive().getSheetByName('Part Names') 
    .getRange(1,5,6,1).getValues(); 
} 

function itemadd(form) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName('Part Names'); 
    var LastRow=sheet.getLastRow(); 
    Logger.log(LastRow); 
    Logger.log(form); 
    sheet.getRange(LastRow+1,1,1,2).setValues(form); 


    return true; 

} 

Test.html

<!DOCTYPE html> 
<html> 
<p>List of parts:</p> 

<select id="menu"> 
    <option></option> 
    <option>Google Chrome</option> 
    <option>Firefox</option> 
</select> 

<select id="thickness"> 
    <option></option> 
    <option>1</option> 
    <option>2</option> 
</select> 

<script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"> 
</script> 
<input type="submit" value="Submit" onclick="select()"> 
<script> 
// The code in this function runs when the page is loaded. 
$(function() { 
    google.script.run.withSuccessHandler(showMenu) 
     .getMenuListFromSheet(); 
    google.script.run.withSuccessHandler(showThickness) 
     .getThicknessFromSheet(); 

}); 

/**function showThings(things) { 
var list = $('#things'); 
list.empty(); 
for (var i = 0; i < things.length; i++) { 
    list.append('<li>' + things[i] + '</li>'); 
} 
} 
**/ 
function showMenu(menuItems) { 
    var list = $('#menu'); 
    list.find('option').remove(); // remove existing contents 

    for (var i = 0; i < menuItems.length; i++) { 
    list.append('<option>' + menuItems[i] + '</option>'); 
    } 
} 

function showThickness(menuThickness) { 
    var list = $('#thickness'); 
    list.find('option').remove(); // remove existing contents 

    for (var i = 0; i < menuThickness.length; i++) { 
    list.append('<option>' + menuThickness[i] + '</option>'); 
    } 
} 



</script> 
<script> 
function select(){ 
var x = document.getElementById('menu').value; 
var y = document.getElementById('thickness').value; 

google.script.run 
      .itemadd(x,y) 

google.script.host.close(); 
</script> 


</html> 

Ich weiß, dass ich irgendwo nicht die Verbindung zwischen dem Skript machen bin und die HTML-Seite aber nicht, wo zu verstehen .

Danke, Tim

Antwort

0

hier die fehlenden Bits aus dem Code:

<input type="submit" value="Submit" onclick="sheetConnect()"> 

In Ihrem .HTML Datei:

function sheetConnect(){ 

    var e = document.getElementById('menu'); //choices are Google Chrome and Firefox 
    var name = e.options[e.selectedIndex].value; //get whatever the user selected 
    google.script.run.writeData(name); //pass the value to Code.gs 
} 

In Ihrem Code.gs

function writeData(name){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName('Sheet1'); //whatever your sheet's name 
    var cell = sheet.getRange(1,8); //assign position to column H row 1 
     cell.setValue(name);  // write selected data from Dropdown named 'menu' 
} 

Ergebnis:

enter image description here

Mit dem Wissen hier Ihr Projekt abzuschließen :)

+0

Danke für diesen Noogui. Könnten Sie mir bitte zeigen, wo ich das HTML-Code-Bit einfügen muss? HTML ist bis letzte Woche völlig neu für mich, daher vermisse ich etwas Wissen darüber, wie die Syntax funktioniert. Muss ich die Funktion sheetConnect() in .HTML einer Button-ID zuweisen, um schließlich mit einem onclick-Event die Auswahl auf das Blatt zu schreiben? –

+0

anstelle Ihrer select() -Methode, verwenden Sie mein sheetConnect() auf Ihrem Eingabe-Tag. – noogui

0

Ich habe gs nicht vor verwendet, aber bei anderen Beispielen aus blickte Ihr Recht, aber in der zweiten Zeile haben Sie tml.Service statt Html.Service, nicht sicher, ob das wird alle deine Probleme beheben, aber das wird es brechen.

+0

Dank, sorry das ist ein Tippfehler auf meinem Ende von meinem Skript in Stackoverflow. In meinem Skript hat es den richtigen Html.Service drin. Ich aktualisierte es jetzt –

Verwandte Themen