首页 > 解决方案 > Apps 脚本:在 HTML 中搜索和显示工作表内容

问题描述

我有一张有 5 列的表格。每列包含有关每个学生的以下信息:

我想使用 Apps 脚本而不是公式来搜索任何学生并在 HTML 文件中显示该学生的详细信息。创建 HTML 文件并将其连接到我的脚本不是问题,因为我知道如何做到这一点并且之前已经做到了。但是我坚持修改脚本的方式,它允许我在工作表中搜索任何学生,并在(回调)函数/变量/数组或我可以调用/使用的任何内容中获取有关该学生的所有信息在我的 HTML 文件中。

非常感谢您在正确方向上提供的任何提示或建议。

当前代码可以找出指定学生在工作表中列出了多少次(因为一个学生可以在工作表中列出很多次并带有一些附加信息!!!),但我不知道如何从这里继续:(

function searchAndFindStudentData() {

  var ss = SpreadsheetApp.openById("SPREADSHEET_ID");
  var sheetname = ss.getSheetByName("SHEET_NAME");

  var countStart = 0;
  var lastColumn = sheetname.getLastColumn();
  var lastRow = sheetname.getLastRow();
  var sheetValues = sheetname.getRange(2, 1, lastRow, lastColumn).getValues();

  for (var row in sheetValues) {
    for (var colum in sheetValues[row]) {

      if (sheetValues[row][colum] == "John Smith") {
        countStart++;
      }
    }
  }
  Logger.log(countStart);
}

标签: javascriptarraysgoogle-apps-script

解决方案


这应该让你开始:

function searchAndFindStudentData() {
  const ss = SpreadsheetApp.openById("SPREADSHEET_ID");
  const sh = ss.getSheetByName("SHEET_NAME");
  const vs = sh.getRange(2, 1, sh.getLastRow() - 1, sh.getLastColumn()).getValues();
  let info = {}
  const r = SpreadsheetApp.getUi().prompt("Enter Student Name" , SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
  if(r.getSelectedButton() == SpreadsheetApp.getUi().Button.OK) {
    let name = r.getResponseText();
    vs.forEach(r => {
      if(r[0] == name ) {
        if(!info.hasOwnProperty(name)) {
          info[name] = {level:[],assignments:[],notes:[]}
        } else {
          if(r[1]) {
            info[name].level.push(r[1]);
          }
          if(r[2] && r[3]) {
            info[name].assignments.push([{num:r[2],grades:r[3]}]);
          }
          if(r[4]) {
            info[name].notes.push(r[4]);
          }
        }
      }
    }); 
    return info;
  } else {
    SpreadsheetApp.getUi().alert('Search Canceled');
  }
} 

推荐阅读