首页 > 解决方案 > 使用 Google Apps 脚本和 JavaScript 从 google 表格反映 HTML 中的选项值

问题描述

我有一个选择日期和时间的网络应用程序调度程序。我希望的是,在选择日期后,它将运行一个代码,该代码将检查 Google 表格中的现有数据并检查数据是否存在 3 次,如果存在限制,它将查找日期在另一张纸上并将数据行反映为 html 中的选择选项。

截至目前,我只有代码JavaScript将调用一个函数并访问Google Apps Script.

对于 JavaScript:

<script>

document.getElementById("subDate").addEventListener("change",setTime);

function setTime(){
var checkVal = document.getElementById("subTime").value;
google.script.run.withSuccessHandler(onSuccess).timeCheck()
}

</script>

和 Google Apps 脚本代码来检查 google 表格中的值的限制。

对于 Google Apps 脚本:

function timeCheck(){

  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Test_Data");  
  var data = ws.getRange(1, 7, ws.getLastRow(), 2).getValues();


  var CheckLimitReached = function (V)
  {
    var records= {};
    V.forEach(function (x) { records[x] = (records[x] || 0) + 1; });
    var limit_reached = Object.keys(records).filter(function (R) {
      return records[R] >= 3;});
    return limit_reached;

  };
   var dataDisable = CheckLimitReached(data);
   Logger.log(dataDisable);


  //return dateDisable;

}

这将是日志输出:

[19-08-22 02:18:10:132 PDT] [Wed Aug 28 2019 00:00:00 GMT+0800 (HKT),8:00 AM]

这里也是谷歌表的链接: https ://docs.google.com/spreadsheets/d/1lEfzjG1zzJVPMN8r-OpeZm6q9_IqSwk9DNCEY-q7ozY/edit?usp=sharing

我仍在编写代码以分别在var dataDisablegoogle 脚本中获取日期值和时间值,以便我可以将其用作工作表中的匹配值Time_Select。因为正如您在日志输出中看到的那样,该值被视为数组中的一个值。

我也在尝试更改时间的选项值。例如,如果在工作Test_Data表中,日期 2019 年 8 月 28 日和上午 8:00 存在 3 次。我将在工作表的第一行中查找 2019 年 8 月 28 日,Time_Select然后将“8:00AM”的值更改为“不可用”,然后如果某些用户在网络应用程序中选择“2019 年 8 月 28 日”日期,将反映的选项值将是:

Not Available
9:00 AM
10:00 AM
11:00 AM
12:00 NN

预先感谢您的帮助。我真的是编程新手,所以我仍在努力。如果解释不是很清楚,我也很抱歉。我愿意回答有关该问题的所有问题,以便更清楚地说明问题。请多多包涵。太感谢了。

标签: javascripthtmlgoogle-apps-scriptgoogle-sheetsweb-applications

解决方案


对于你的第一个问题:

提供的var dataDisabled是一个包含多个类型为 的对象的数组date,您可以将日期和时间分开,如下所示:

var day=[];
var time=[];
for(var k=0;k<dataDisabled.length;k++)
 { 
  //please adapt the time zone and date formatting to your needs
day[k]=Utilities.formatDate(dataDisabled[k], 'GMT+2' , "MMMM dd,  YYYY");
time[k]= Utilities.formatDate(dataDisabled[k], 'GMT+2' ,' hh:mm a');
 }

我根据您电子表格中的格式格式化了日期和时间,请在此处查阅所有可用的格式选项。

对于你的第二个问题:

Test-Data从in查找日期和时间的有用方法Time-SelectindexOf()

function notAvailable() {

  var ss = SpreadsheetApp.openByUrl(URL);
  var ws = ss.getSheetByName("Test_Data");  
  var ts= ss.getSheetByName("Time_Select");  
  var data = ws.getRange(2, 7, ws.getLastRow()-1, 2).getValues();
  var dataTimeSelect= ts.getRange(1, 1, ss.getLastRow(), 4).getValues();
  var arrayTimeSelect=[];
  for(var k=0;k<dataTimeSelect[0].length;k++){
     arrayTimeSelect.push(Utilities.formatDate(dataTimeSelect[0][k], 'GMT+2' , "MMMM dd,  YYYY")) 
    }
  for(var i=0;i<data.length;i++){
    var column=arrayTimeSelect.indexOf(Utilities.formatDate(data[i][0], 'GMT+2' , "MMMM dd,  YYYY"));
    for(var j=0;j<dataTimeSelect.length;j++){
      if(column!=-1){
        if(dataTimeSelect[j][column]==data[i][1]){
          ts.getRange(j+1, column+1).setValue('Not Available')
         }
      }
    }             
  }
}

推荐阅读