javascript - 使用 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 dataDisable
google 脚本中获取日期值和时间值,以便我可以将其用作工作表中的匹配值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
预先感谢您的帮助。我真的是编程新手,所以我仍在努力。如果解释不是很清楚,我也很抱歉。我愿意回答有关该问题的所有问题,以便更清楚地说明问题。请多多包涵。太感谢了。
解决方案
对于你的第一个问题:
提供的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-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')
}
}
}
}
}
推荐阅读
- java-8 - Java 8:检查两个或多个变量不为空的优雅方法
- javascript - 与 javascript 和 d3.js 中的范围相关的奇怪行为
- google-cloud-firestore - 如何发出未经身份验证的 Firestore REST API POST 请求
- c# - VSTO:如何以编程方式打开我的 AddIn 的 OptionsPage
- spring - 针对独立/云服务器运行 SpringTests / SpringBootTests
- mysql - 使用 GraphX spark lib 为以下 Hive 连接生成层次结构序列
- ios - 从数组中获取字典数据
- ios - 如何使用 Swift 在现有图像中添加背景颜色?
- node.js - 管道模块扫描所有不相关的文件
- django - 如何从覆盖范围中排除文件?