google-apps-script - 谷歌应用脚本中的级联下拉菜单
问题描述
我发布此消息是因为我被困在 Web 应用程序的设计中。
这样做的目的是将在表单(不是 Google 表单)中输入的数据保存在工作表中。我遇到的问题是下拉菜单。我想要其中的 4 个(站点、扇区、区域和房间)并且它们是级联的。事实上,选择一个站点只允许在部门下拉列表中显示与其相关的那些。依此类推,直到房间。
我设法将站点与扇区链接起来,但我被阻止了扇区到区域和区域到房间的部分。
- 这是我的 gs 代码:
// 常量声明
常量 URL = 'https://docs.google.com/spreadsheets/d/1QG_eMv2xdYB7tCh80Lm7oVbRD_PIioRG8qNjcxlaSuo/edit#gid=1898395234';
//方法 GET
function doGet(e) {
var htmlOutput = HtmlService.createTemplateFromFile('WebApp');
var sites = getSites();
htmlOutput.message = '';
htmlOutput.sites = sites;
return htmlOutput.evaluate();
}
// 方法 POST
function doPost(e) {
Logger.log(JSON.stringify(e));
var name = e.parameters.name.toString();
var site = e.parameters.site.toString();
var secteur = e.parameters.secteur.toString();
AddRecord(name, site, secteur);
var htmlOutput = HtmlService.createTemplateFromFile('WebApp');
var sites = getSites();
htmlOutput.message = 'Votre demande a été enregistrée.';
htmlOutput.sites = sites;
return htmlOutput.evaluate();
}
// Récupérer les Sites
function getSites() {
var ss= SpreadsheetApp.getActiveSpreadsheet();
var lovSheet = ss.getSheetByName("Sites/Secteurs");
var getLastRow = lovSheet.getLastRow();
var return_array = [];
for(var i = 2; i <= getLastRow; i++){
if(return_array.indexOf(lovSheet.getRange(i, 1).getValue()) === -1) {
return_array.push(lovSheet.getRange(i, 1).getValue());
}
}
return return_array;
}
// Récupérer les Secteurs en fonction d'un site rentré en paramètre
function getSecteurs(site) {
var ss= SpreadsheetApp.getActiveSpreadsheet();
var lovSheet = ss.getSheetByName("Sites/Secteurs");
var getLastRow = lovSheet.getLastRow();
var return_array = [];
for(var i = 2; i <= getLastRow; i++){
if(lovSheet.getRange(i, 1).getValue() === site) {
return_array.push(lovSheet.getRange(i, 2).getValue());
}
}
return return_array;
}
// Enregistrer les données dans le sheet
function AddRecord(name, site, secteur) {
var ss= SpreadsheetApp.openByUrl(URL);
var dataSheet = ss.getSheetByName("Demandes");
dataSheet.appendRow([IncrementId(), new Date(), getUser(), site, secteur, name]);
}
// Récupérer l'URL
function getUrl() {
var url = ScriptApp.getService().getUrl();
return url;
}
// 自动增加 l'id
function IncrementId(){
var id = 1;
var year = extractYear().toString().substr(-2);
var ss = SpreadsheetApp.openByUrl(URL);
var sheet = ss.getSheetByName("Demandes");
var lastRow = sheet.getLastRow();
var lastCell = sheet.getRange(lastRow, 1).getValue();
var lastCellSplit = lastCell.split("_");
var idSplit = parseInt(lastCellSplit[0]);
var yearSplit = lastCellSplit[1];
if (lastCell =="ID"){
var id = 1 + "_" + year;
} else if(year == yearSplit){
var id = (idSplit + 1)+"_"+yearSplit;
} else {
var id = 1 + "_" + year;
}
return id;
}
// Récupérer l'annee
function extractYear(){
var date = new Date ();
var year = date.getFullYear();
return year;
}
// Récupérer l'adresse mail de l'utilisateur
function getUser() {
var theUser = Session.getActiveUser().getEmail();
return theUser;
}
这是 .html 代码:
2.1 脚本部分:
function GetSecteur(site) { google.script.run.withSuccessHandler(function(ar) { secteur.length = 0; let option = document.createElement("option"); option.value = ""; option.id = ""; option.text = ""; secteur.appendChild(option); ar.forEach(function(item, index) { let option = document.createElement("option"); option.value = item; option.text = item; option.id = item; secteur.appendChild(option); }); }).getSecteurs(site);
};
2.2. 表单部分: 抱歉,我无法为这部分添加代码
你知道如何让四个下拉菜单相互链接吗?我试图复制我为第一步所做的,但它不起作用......
如果您有任何问题,请随时问我。提前感谢您的反馈,并对我的英语感到抱歉。
解决方案
推荐阅读
- r - 将三组配对数据与 limma 进行比较。如何进行配对设计
- javascript - 使用函数更改 openlayers 中可见的图标颜色
- xml - xsl:删除命名空间然后转换元素
- c# - 如何从方法中的对象中检索值以在另一个方法中使用它?
- vba - 对象不支持属性或方法 getElementsByClassName IE 对象
- clips - 如何在 CLIPS 中刷新事实?
- paypal - PayPal Braintree 集成 - 什么是访问令牌?
- html - 为什么我在 Angular mat-icon-button 中看不到图标图片?
- scala - 无法访问特征实现的额外方法
- android - sqlite3 android studio 的问题