Ich möchte ein Formular haben, mit dem der Benutzer einige Daten eingeben kann, die dann in Variablen zur Verwendung in anderen Funktionen gespeichert werden. Insbesondere brauche ich sie nur, um den Namen von zwei Blättern (shtName und databaseName) definieren zu können.Variable basierend auf Formulareingabe in Google Apps Script (Tabellenkalkulation) definieren
Ich kann die Variable nicht im Skript arbeiten, da es mir sagt, dass die Variablen nicht definiert sind (bezieht sich auf shtName & databaseName hier).
ich diesen Fehler: ReferenceError: "shtName" is not defined.
Wenn ich shtName und database außerhalb einer Funktion zu definieren, es funktioniert. Das ist natürlich das Problem, aber nicht sicher, wie ich es umgehen soll.
index.html
<html>
<head>
<base target="_top">
</head>
<body>
<form name="myForm">
Name of current sheet:<br>
<input type="text" name="formshtname" >
<br><br>
Which database sheet to search in?<br>
<input type="text" name="formtagdatabase">
<br><br>
<input type="button" value="Submit"
onclick="google.script.run
.withSuccessHandler(google.script.host.close)
.formSubmit(this.parentNode)" />
<input type="button" value="Close" onclick="google.script.host.close()" />
</form>
</body>
</html>
addTags.gs
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Tags')
.addItem('Setup', 'openSetup')
.addSeparator()
.addItem('Add tags', 'findingTags3')
.addToUi();
}
function openSetup() {
var html = HtmlService.createHtmlOutputFromFile('index').setSandboxMode(HtmlService.SandboxMode.IFRAME);
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.showModalDialog(html, 'To auto complete tags, fill in the form');
}
function formSubmit(form) {
var shtName = form.formshtname;
var databaseName = form.formtagdatabase;
}
function findingTags3() {
// bunch of code
/* current spreadsheet */
var spreadsheet = SpreadsheetApp.getActive()
var sht = SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName(shtName)); // want this to be defined from form
/* tag database spreadsheet */
var spreadsheet2 = SpreadsheetApp.openById("xxx");
var sht2 = spreadsheet2.getSheetByName(databaseName); // want this to be defined from form
// more code
}
EDIT:
Ok, ein Weg, der durch Addieren dieser Innen Funktion findingtags3 es tut()
var shtName = Browser.inputBox("Current sheet name");
var databaseName = Browser.inputBox("Input sheet name of database you want to search");
Ich denke, das wird es tun, aber es wäre netter, ein richtiges Setup zu haben, wo Sie diese Informationen eingeben und es gespeichert wird, bis Sie die Eingabe ändern.
Wenn Sie etwas speichern möchten, checkout [PropertiesService] (https://developers.google.com/apps-script/reference/properties/properties-service). Oder Sie können es auch in einer Datei speichern. – Cooper