You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets产品Dropdown filter异常:部分分类组合无结果显示

产品Dropdown Filter筛选异常问题

我基于Google Sheets开发的产品Dropdown Filter存在筛选异常:当选择分类为Phones、子分类为Samsung时,能正常显示对应产品;但选择分类为Watch、子分类为Apple Watch时,无任何产品显示。需要确保只要Google Sheets中存在对应分类与子分类的产品,筛选后就能正常展示结果。

Google Apps Script代码

function getCategories() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Product");
  var categories = [];
  var data = sheet.getDataRange().getValues();
  for (var i = 1; i < data.length; i++) {
    var category = data[i][0];
    if (categories.indexOf(category) == -1) {
      categories.push(category);
    }
  }
  return categories;
}

function getSubCategories(category) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Product");
  var subCategories = [];
  var data = sheet.getDataRange().getValues();
  for (var i = 1; i < data.length; i++) {
    var rowCategory = data[i][0];
    var subCategory = data[i][1];
    if (rowCategory == category && subCategories.indexOf(subCategory) == -1) {
      subCategories.push(subCategory);
    }
  }
  return subCategories;
}


function filterProducts(category, subCategory) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Product");
  var [headers, ...data] = sheet.getDataRange().getValues();
  var filteredData = data.filter(function (row) {
    return row[0] == category && row[1] == subCategory;
  });
  return [headers, ...filteredData];
}

function doGet() {
  var template = HtmlService.createTemplateFromFile('index');
  template.categories = getCategories();
  template.category = '';
  template.subCategory='';
  return template.evaluate().setTitle('Product Filter');
}

function include(filename) {
  return HtmlService.createHtmlOutputFromFile(filename)
      .getContent();
}

function getSheetData()  { 
  var ss= SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Product'); 
  var dataRange = sheet.getDataRange();
  var dataValues = dataRange.getValues();  
  return dataValues;
}


function getUrl() {
 var url = ScriptApp.getService().getUrl();
 return url;
}

HTML代码

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
    function getSubCategories(category) 
    {
    
google.script.run.withSuccessHandler(function(ar) 
    {

    console.log(ar);
    
    subCategory.length = 0;
    
    let option = document.createElement("option");
    option.value = "";
    option.text = "";
    subCategory.appendChild(option);
    
    ar.forEach(function(item, index) 
    {    
      let option = document.createElement("option");
      option.value = item;
      option.text = item;
      subCategory.appendChild(option);    
    });
    
    }).getSubCategories(category);
    
    };

      function updateSubCategories() {
        var category = document.getElementById('category').value;
        google.script.run.withSuccessHandler(function(subCategories) {
          var subCategoryDropdown = document.getElementById('sub-category');
          subCategoryDropdown.innerHTML = '';
          for (var i = 0; i < subCategories.length; i++) {
            var option = document.createElement('option');
            option.value = subCategories[i];
            option.text = subCategories[i];
            subCategoryDropdown.appendChild(option);
          }
        }).getSubCategories(category);
      }
     
function filterProducts() {
  var category = document.getElementById('category').value;
  var subCategory = document.getElementById('sub-category').value;
  google.script.run.withSuccessHandler(function(filteredData) {
    var [headers, ...filteredData] = filteredData;
    var productTable = document.getElementById('product-table');
    productTable.innerHTML = '';
    var headerRow = document.createElement('tr');
    for (var i = 0; i < headers.length; i++) {
      var headerCell = document.createElement('th');
      headerCell.textContent = headers[i];
      headerRow.appendChild(headerCell);
    }
    productTable.appendChild(headerRow);
    for (var i = 0; i < filteredData.length; i++) {
      var row = filteredData[i];
      var tableRow = document.createElement('tr');
      for (var j = 0; j < row.length; j++) { 
        var tableCell = document.createElement('td');
        tableCell.textContent = row[j];
        tableRow.appendChild(tableCell);
      }
      productTable.appendChild(tableRow);
    }
  }).filterProducts(category, subCategory);
}
    </script>
  </head>
  <body>
    <h1>Product Filter</h1>
    <?var tableData = getSheetData();?>
    <?var url = getUrl();?>
    <label for="category">Category:</label>
    <select id="category" onchange="updateSubCategories()">
      <? for (var i = 0; i < categories.length; i++) { ?>
        <option value="<?= categories[i] ?>"><?= categories[i] ?></option>
      <? } ?>
    </select>
    <label for="sub-category">Sub-Category:</label>
    <select id="sub-category" onchange="filterProducts()">
    </select><br><br>

    <? if(category != '' || subCategory != '')
    {
        var output_array = [];
        tableData.forEach(function(value, index) {
        
          if(index == 0)
          {
            output_array.push(value);
          }
          else if(index > 0 && category != '' && subCategory != '')
          {
            if(value[0] == category && value[2] == subCategory)
            {
              output_array.push(value);
             }
            }
            else if(index > 0 && category != '')
            {
              if(value[0] == category)
              {                        
                output_array.push(value);
              }            
            }
            else if(index > 0 && subCategory != '')
            {
              if(value[2] == subCategory)
              {                        
                output_array.push(value);
              }           
            }                           
        });
    }
    else
    {
      var output_array = tableData;    
    }  ?>
    <!-- <table id="product-table">

    </table> -->

    <table id="product-table" border="1" cellpadding="5px" >
    <?for(var i = 0; i < tableData.length; i++) { ?>
      <?if(i == 0) { ?>
        <tr>
        <?for(var j = 0; j < tableData[i].length; j++) { ?>
        <th><?= tableData[i][j] ?></th>
        <? } ?>
        </tr>
      <? } else { ?>
        <tr>
        <? for(var j = 0; j < tableData[i].length; j++) { ?>
          <td><?= tableData[i][j] ?></td>
          <? } ?>
        </tr>
      <? } ?>
    <? } ?>
    </table>
  </body>
</html> 

截图

  • 全产品列表:全产品列表
  • Dell电脑筛选结果:Dell电脑筛选结果
  • Watch筛选无结果:Watch筛选无结果

内容的提问来源于stack exchange,提问作者Lamin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 09:22:06