首页 > 解决方案 > 谷歌应用脚​​本中的级联下拉菜单

问题描述

我发布此消息是因为我被困在 Web 应用程序的设计中。

这样做的目的是将在表单(不是 Google 表单)中输入的数据保存在工作表中。我遇到的问题是下拉菜单。我想要其中的 4 个(站点、扇区、区域和房间)并且它们是级联的。事实上,选择一个站点只允许在部门下拉列表中显示与其相关的那些。依此类推,直到房间。

我设法将站点与扇区链接起来,但我被阻止了扇区到区域和区域到房间的部分。

  1. 这是我的 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;
}
  1. 这是 .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. 表单部分: 抱歉,我无法为这部分添加代码 在此处输入图像描述

你知道如何让四个下拉菜单相互链接吗?我试图复制我为第一步所做的,但它不起作用......

如果您有任何问题,请随时问我。提前感谢您的反馈,并对我的英语感到抱歉。

标签: google-apps-scriptgoogle-sheets

解决方案


推荐阅读