从Google电子表格数据在网页上构建/填充下拉菜单

Building / Populating a Drop Down Menu on Web Page from Google Spreadsheet Data

本文关键字:构建 填充 下拉菜单 网页 Google 电子表格 数据      更新时间:2023-09-26

我正在使用Google可视化查询从这个电子表格中提取列标题。目前,我必须在菜单中包括我想要的每个单元格的行和列索引。我想要的是一个脚本,它将用电子表格第1行单元格中的数据动态填充此菜单。换句话说,使菜单与电子表格上的内容一样大或一样小。

我相信我需要如下的东西,但我不确定如何实现它。也许我需要服务器端脚本(GAS)来实现这一点??

<select>
     for (var i = 0; i < data.length; ++i) { 
      <option>!= data[i] </option>
     } 
  </select>

我已经找到了很多使用谷歌的HTMLService来实现这一点的文档,但我需要使用不同的服务来托管这个菜单。

如有任何帮助,我们将不胜感激。谢谢

我当前的代码如下。。。

google.load('visualization', '1', {'packages':['corechart']});
	google.setOnLoadCallback(ValIDS);
    
	function ValIDS() {
	var queryValIDS = new google.visualization.Query('https://docs.google.com/spreadsheet/ccc?key=1HpHMfoEnPgESb2XPVCgb7XyGwRAvrq3EoQj4WHj4vhA&sheet=QUERY2');
	queryValIDS.send(handleQueryValIDResponse);
    }
 
 	function handleQueryValIDResponse(response) {
            if (response.isError()) {
                alert('Error in ID Validation Query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
                return;
            }
	var datatable = response.getDataTable();	
	var cat1 = datatable.getValue(0,0);
	var cat2 = datatable.getValue(0,1);
	var cat3 = datatable.getValue(0,2);
	var cat4 = datatable.getValue(0,3);
	var cat5 = datatable.getValue(0,4);
	var cat6 = datatable.getValue(0,5);
	var cat7 = datatable.getValue(0,6);
	var cat8 = datatable.getValue(0,7);
	var cat9 = datatable.getValue(0,8);
	var cat10 = datatable.getValue(0,9);
	
	
      
		document.getElementById('cat1').innerHTML = cat1;
		document.getElementById('cat2').innerHTML = cat2;
		document.getElementById('cat3').innerHTML = cat3;
		document.getElementById('cat4').innerHTML = cat4;
		document.getElementById('cat5').innerHTML = cat5;
		document.getElementById('cat6').innerHTML = cat6;
		document.getElementById('cat7').innerHTML = cat7;
		document.getElementById('cat8').innerHTML = cat8;
		document.getElementById('cat9').innerHTML = cat9;
		document.getElementById('cat10').innerHTML = cat10;
				
       
        }
function myFunction() {
    document.getElementById("myDropdown").classList.toggle("show");
}
window.onclick = function(event) {
  if (!event.target.matches('.dropbtn')) {
    var dropdowns = document.getElementsByClassName("dropdown-content");
    var i;
    for (i = 0; i < dropdowns.length; i++) {
      var openDropdown = dropdowns[i];
      if (openDropdown.classList.contains('show')) {
        openDropdown.classList.remove('show');
      }
    }
  }
}
.dropbtn {
    background-color: #4CAF50;
    color: white;
    padding: 16px;
    font-size: 16px;
    border: none;
    cursor: pointer;
}
.dropbtn:hover, .dropbtn:focus {
    background-color: #3e8e41;
}
.dropdown {
    position: relative;
    display: inline-block;
}
.dropdown-content {
    display: none;
    position: absolute;
    background-color: #f9f9f9;
    min-width: 160px;
    overflow: auto;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}
.dropdown-content a {
    color: black;
    padding: 12px 16px;
    text-decoration: none;
    display: block;
}
.dropdown a:hover {background-color: #f1f1f1}
.show {display:block;}
.dropbtn {
    background-color: #4CAF50;
    color: white;
    padding: 16px;
    font-size: 16px;
    border: none;
    cursor: pointer;
}
.dropbtn:hover, .dropbtn:focus {
    background-color: #3e8e41;
}
.dropdown {
    position: relative;
    display: inline-block;
}
.dropdown-content {
    display: none;
    position: absolute;
    background-color: #f9f9f9;
    min-width: 160px;
    overflow: auto;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}
.dropdown-content a {
    color: black;
    padding: 12px 16px;
    text-decoration: none;
    display: block;
}
.dropdown a:hover {background-color: #f1f1f1}
.show {display:block;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<div class="dropdown">
<button onclick="myFunction()" class="dropbtn">Dropdown</button>
  <div id="myDropdown" class="dropdown-content">
    <a href="#"><div id="cat1"></div></a>
    <a href="#"><div id="cat2"></div></a>
    <a href="#"><div id="cat3"></div></a>
	<a href="#"><div id="cat4"></div></a>
    <a href="#"><div id="cat5"></div></a>
    <a href="#"><div id="cat6"></div></a>
	<a href="#"><div id="cat7"></div></a>
    <a href="#"><div id="cat8"></div></a>
    <a href="#"><div id="cat9"></div></a>
	<a href="#"><div id="cat10"></div></a>
 
  </div>
</div>

您可以使用客户端JavaScript动态构建下拉列表
使用来自datatable 的数据

有很多方法,但这应该可以实现您需要的

您可以使用getNumberOfColumns而不是对每个下拉项进行硬编码
这将允许在电子表格中添加其他列,
而不必更改代码/html/

for (var i = 0; i < datatable.getNumberOfColumns(); i++) {
  var ddItem = document.getElementById('myDropdown').appendChild(document.createElement('A'));
  ddItem.href = '#';
  var ddItemContent = ddItem.appendChild(document.createElement('SPAN'));
  ddItemContent.id = 'cat' + (i + 1);
  ddItemContent.innerHTML = datatable.getValue(0, i);
}

(i + 1)用于上述id
只是为了让id和你硬编码的一样

由于锚点(<a>)是内联元素,
使用<span>代替<div>

您甚至可能不需要idSPAN
因为下拉项目是动态创建的

请参阅以下工作片段。。。

google.load('visualization', '1', {'packages':['corechart']});
google.setOnLoadCallback(ValIDS);
function ValIDS() {
  var queryValIDS = new google.visualization.Query('https://docs.google.com/spreadsheet/ccc?key=1HpHMfoEnPgESb2XPVCgb7XyGwRAvrq3EoQj4WHj4vhA&sheet=QUERY2');
  queryValIDS.send(handleQueryValIDResponse);
}
function handleQueryValIDResponse(response) {
  if (response.isError()) {
    alert('Error in ID Validation Query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
    return;
  }
  var datatable = response.getDataTable();
  for (var i = 0; i < datatable.getNumberOfColumns(); i++) {
    var ddItem = document.getElementById('myDropdown').appendChild(document.createElement('A'));
    ddItem.href = '#';
    var ddItemContent = ddItem.appendChild(document.createElement('SPAN'));
    ddItemContent.id = 'cat' + (i + 1);
    ddItemContent.innerHTML = datatable.getValue(0, i);
  }
}
function myFunction() {
  document.getElementById('myDropdown').classList.toggle('show');
}
window.onclick = function(event) {
  if (!event.target.matches('.dropbtn')) {
    var dropdowns = document.getElementsByClassName('dropdown-content');
    var i;
    for (i = 0; i < dropdowns.length; i++) {
      var openDropdown = dropdowns[i];
      if (openDropdown.classList.contains('show')) {
        openDropdown.classList.remove('show');
      }
    }
  }
}
.dropbtn {
    background-color: #4CAF50;
    color: white;
    padding: 16px;
    font-size: 16px;
    border: none;
    cursor: pointer;
}
.dropbtn:hover, .dropbtn:focus {
    background-color: #3e8e41;
}
.dropdown {
    position: relative;
    display: inline-block;
}
.dropdown-content {
    display: none;
    position: absolute;
    background-color: #f9f9f9;
    min-width: 160px;
    overflow: auto;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}
.dropdown-content a {
    color: black;
    padding: 12px 16px;
    text-decoration: none;
    display: block;
}
.dropdown a:hover {background-color: #f1f1f1}
.show {display:block;}
.dropbtn {
    background-color: #4CAF50;
    color: white;
    padding: 16px;
    font-size: 16px;
    border: none;
    cursor: pointer;
}
.dropbtn:hover, .dropbtn:focus {
    background-color: #3e8e41;
}
.dropdown {
    position: relative;
    display: inline-block;
}
.dropdown-content {
    display: none;
    position: absolute;
    background-color: #f9f9f9;
    min-width: 160px;
    overflow: auto;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}
.dropdown-content a {
    color: black;
    padding: 12px 16px;
    text-decoration: none;
    display: block;
}
.dropdown a:hover {background-color: #f1f1f1}
.show {display:block;}
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="dropdown">
  <button onclick="myFunction()" class="dropbtn">Dropdown</button>
  <div id="myDropdown" class="dropdown-content"></div>
</div>

编辑

getValue方法采用两个参数

getValue(rowIndex, columnIndex)

rowIndexcolumnIndex都是基于零的,
意味着第一个信元值将是CCD_ 15

如果要从每行的第一列中提取值。。。

使用i作为rowIndex,使用0作为columnIndex

for (var i = 0; i < datatable.getNumberOfRows(); i++) {
  var test = datatable.getValue(i, 0);
}