[英]Google Apps Script (Spreadsheet) - selecting an array in spreadsheet based on a condition in cells
[英]Define variable based on form input in Google Apps Script (Spreadsheet)
我想要一种允许用户输入一些数据的表格,然后将其存储在变量中以供其他功能使用。 具体来说,我只需要它们能够定义两张纸的名称(shtName和databaseName)。
我无法使变量在脚本中工作,因为它告诉我变量未定义(在此引用shtName和databaseName)。
我收到此错误: ReferenceError: "shtName" is not defined.
如果我在函数外部定义shtName和databaseName,那么它将起作用。 因此,这显然是问题所在,但不确定如何解决。
的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
}
编辑:
好的,一种实现方法是在函数内部添加findtags3()
var shtName = Browser.inputBox("Current sheet name");
var databaseName = Browser.inputBox("Input sheet name of database you want to search");
我想这样做可以,但是最好有一个适当的设置来输入信息并存储它,直到您更改输入为止。
您可以使用propertiesService来存储变量,直到准备执行该函数为止。
您的代码将如下所示:
function exampleSubmit(){ // this function will set a mock/default values to properties
var form = {
"formshtname" : "Sheet1",
"formtagdatabase" : "Sheet4"
}
Logger.log(form)
formSubmit(form)
}
function formSubmit(form) {
var docProp = PropertiesService.getDocumentProperties()
docProp.setProperty("shtname", form.formshtname)
docProp.setProperty("databaseName",form.formtagdatabase)
}
function findingTags3() {
// bunch of code
var docProp = PropertiesService.getDocumentProperties()
var shtName = docProp.getProperty("shtname")
var databaseName = docProp.getProperty("databaseName")
/* current spreadsheet */
var spreadsheet = SpreadsheetApp.getActive()
var sht = SpreadsheetApp.setActiveSheet(spreadsheet.getSheetByName(shtName)); // want this to be defined from form
Logger.log(sht.getName())
/* tag database spreadsheet */
var spreadsheet2 = SpreadsheetApp.openById("xxx");
var sht2 = spreadsheet2.getSheetByName(databaseName); // want this to be defined from form
Logger.log(sht2.getName())
// more code
}
如果希望每个用户的值唯一,则这是文档特定的属性。 请改用用户属性 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.