簡體   English   中英

根據Google Apps腳本(電子表格)中的表單輸入定義變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM