【问题标题】:Reflect the Option Values in HTML from google sheet using Google Apps Script and JavaScript使用 Google Apps 脚本和 JavaScript 从 google 表格反映 HTML 中的选项值
【发布时间】:2019-12-27 14:03:10
【问题描述】:

我有一个选择日期和时间的网络应用程序调度程序。我希望的是,在选择日期后,它将运行一个代码,该代码将检查 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

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

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

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

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

【问题讨论】:

    标签: javascript html google-apps-script google-sheets web-applications


    【解决方案1】:

    关于你的第一个问题:

    假设,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');
     }
    

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

    关于你的第二个问题:

    Test-DataTime-Select 中查找日期和时间的有用方法是indexOf()

    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')
             }
          }
        }             
      }
    }
    

    【讨论】:

    • 我尝试了您的第一个解决方案,我将时区更改为 GMT+8。我收到"Missing ; before statement." 错误。搜索后,解决方法是删除var day[k]=Utilities.formatDate(dataDisable[k], 'GMT+2' , "MMMM dd, YYYY");中的var,收到Cannot find method formatDate(string,string,string).错误。仍在寻找解决方案。谢谢。
    • 找不到方法 formatDate(string,string,string) 表示dataDisabled 的内容是字符串而不是日期。我不确定您从哪里获取内容,但您必须确保将日期对象解析为 Utilities.formatDate()。您可以使用 new Date(dateString) w3schools.com/js/js_dates.asp 将 dateStrings 转换为日期,前提是 dateString 遵循可接受的格式:w3schools.com/js/js_date_formats.asp
    • 由于我的输出是[Wed Aug 28 2019 00:00:00 GMT+0800 (HKT),8:00 AM],是否可以像[August 28, 2019, 8:00AM] 那样将字符串日期与时间分开?我试图创建一个变量var dataTest = new Date(dataDisable);,在记录它时结果是Thu Jan 01 08:00:00 GMT+08:00 1970。我仍在尝试搜索。
    • 如果您愿意继续使用字符串,您可以将 str.split 与 RegExp 一起使用:javascript.info/regexp-methods#str-replace-str-reg-str-func
    • 还有其他解决方案吗?我需要在 javascript 中返回它还是在 google 脚本中工作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多