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

如何用Google Script和JavaScript为谷歌表格每行生成HTML无序列表

需求与问题

现有基于Google表格生成数据表格的Google Script代码,需修改为为表格每行生成包含对应字段值的HTML无序列表,预期效果如下:

<ul>
<li><b>Vendor Type:</b> "Vendor Type" </li>
<li><b>Location:</b> "Location"</li>
<li><b>Pronouns:</b> "Pronouns "</li>
<li><b>LGBTQ Status:</b> "LGBTQ Status"</li>
</ul>

当前已有可正常运行的生成数据表格代码,但尝试ChatGPT生成的代码部署后页面空白,需可行的修改方案。


当前可运行的代码

HTML代码

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <!--INCLUDE REQUIRED EXTERNAL JAVASCRIPT AND CSS LIBRARIES-->
    <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
    <script src="https://cdn.datatables.net/1.10.23/js/jquery.dataTables.min.js"></script>
    <script src="https://cdn.datatables.net/1.10.23/js/dataTables.bootstrap4.min.js"></script>
    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.css">
    <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.23/css/dataTables.bootstrap4.min.css">
 
    <?!= include('JavaScript'); ?> <!--INCLUDE JavaScript.html FILE-->
  </head>
 
  <body>
    <div class="container">
      <br>
      <div class="row">
        <table id="data-table" class="table table-striped table-sm table-hover table-bordered">
          <!-- TABLE DATA IS ADDED BY THE showData() JAVASCRIPT FUNCTION ABOVE -->
        </table>
      </div>
    </div>  
  </body>
</html>

JavaScript代码

<script>
  /*
  *THIS FUNCTION CALLS THE getData() FUNCTION IN THE Code.gs FILE, 
  *AND PASS RETURNED DATA TO showData() FUNCTION
  */
  google.script.run.withSuccessHandler(showData).getData();
 
  //THIS FUNCTION GENERATE THE DATA TABLE FROM THE DATA ARRAY
  function showData(dataArray){
    $(document).ready(function(){
      $('#data-table').DataTable({
        data: dataArray,
        //CHANGE THE TABLE HEADINGS BELOW TO MATCH WITH YOUR SELECTED DATA RANGE
        columns: [
          {"title":"Business Name"},
          {"title":"Vendor Type"},
          {"title":"Location"},
          {"title":"Pronouns"},
          {"title":"Website URL"},
          {"title":"Facebook URL"},
          {"title":"Instagram @"},
          {"title":"TikTok URL"},
          {"title":"Pinterest URL"},
          {"title":"Short Bio"},
          {"title":"LGBTQ Status"},
          {"title":"Email Address"}
        ]
      });
    });
  }
</script> 

Code.gs代码

function doGet() {
  return HtmlService.createTemplateFromFile('Index').evaluate();
}
 
//GET DATA FROM GOOGLE SHEET AND RETURN AS AN ARRAY
function getData(){
  var spreadSheetId = ""; //CHANGE
  var dataRange     = "Form Responses 1!B2:M"; //CHANGE
 
  var range   = Sheets.Spreadsheets.Values.get(spreadSheetId,dataRange);
  var values  = range.values;
 
  return values;
}
 
//INCLUDE JAVASCRIPT AND CSS FILES
function include(filename) {
  return HtmlService.createHtmlOutputFromFile(filename)
      .getContent();
}

尝试过的无效代码

以下ChatGPT生成的代码部署后页面空白:

function generateHTML(row) {
  return `
    <li><b>Vendor Type:</b> ${row[0]}</li>
    <li><b>Location:</b> ${row[1]}</li>
    <li><b>Pronouns:</b> ${row[2]}</li>
    <li><b>LGBTQ Status:</b> ${row[3]}</li>
  `;
}

function generateHTMLList() {
  const spreadsheetId = 'your_spreadsheet_id';
  const sheetName = 'Sheet1';
  const range = `${sheetName}!A2:D`;

  const sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
  const data = sheet.getRange(range).getValues();

  if (data.length > 0) {
    const htmlListItems = data.map(row => generateHTML(row)).join('');
    const htmlOutput = `<ul>${htmlListItems}</ul>`;
    Logger.log(htmlOutput);
    // You can use the HTML output as needed, e.g., to display it in a dialog or send it as an email
  } else {
    Logger.log('No data found.');
  }
}

可行解决方案

基于现有可运行代码修改,无需改动Code.gs,仅调整前端HTML和JavaScript逻辑即可:

1. 修改HTML代码

移除DataTables相关依赖(不再需要表格组件),将表格容器替换为列表容器:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <!--仅保留jQuery和Bootstrap样式-->
    <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.css">
 
    <?!= include('JavaScript'); ?>
  </head>
 
  <body>
    <div class="container">
      <br>
      <div class="row" id="vendor-lists">
        <!-- 列表将通过JavaScript生成并插入此处 -->
      </div>
    </div>  
  </body>
</html>

2. 修改JavaScript代码

重写showData函数,遍历返回的数据数组,为每行生成对应的<ul>列表,并插入到页面容器中:

<script>
  google.script.run.withSuccessHandler(showData).getData();
 
  function showData(dataArray){
    $(document).ready(function(){
      const container = $('#vendor-lists');
      // 遍历每行数据
      dataArray.forEach(row => {
        // 根据数据索引匹配对应字段:参考原columns顺序
        const vendorType = row[1] || '';
        const location = row[2] || '';
        const pronouns = row[3] || '';
        const lgbtqStatus = row[10] || '';
        
        // 生成单条数据的HTML列表
        const listHtml = `
          <div class="col-md-6 mb-4">
            <ul class="list-group">
              <li class="list-group-item"><b>Vendor Type:</b> "${vendorType}"</li>
              <li class="list-group-item"><b>Location:</b> "${location}"</li>
              <li class="list-group-item"><b>Pronouns:</b> "${pronouns}"</li>
              <li class="list-group-item"><b>LGBTQ Status:</b> "${lgbtqStatus}"</li>
            </ul>
          </div>
        `;
        // 将列表添加到容器中
        container.append(listHtml);
      });
    });
  }
</script>

修改说明

  • 保留了原有的getData数据获取逻辑,确保数据来源正确
  • 修正了ChatGPT代码中字段索引错误的问题(原数据中Vendor Type对应row[1]而非row[0])
  • 使用Bootstrap的list-group样式优化列表展示,同时添加了响应式布局(每行2列)
  • 增加了空值处理(|| ''),避免字段为空时显示undefined

内容的提问来源于stack exchange,提问作者vphoto-so

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:12:32