Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用谷歌应用程序脚本更改选项值(时间),如果该值在某个日期达到其限制_Javascript_Html_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 使用谷歌应用程序脚本更改选项值(时间),如果该值在某个日期达到其限制

Javascript 使用谷歌应用程序脚本更改选项值(时间),如果该值在某个日期达到其限制,javascript,html,google-apps-script,google-sheets,Javascript,Html,Google Apps Script,Google Sheets,我有一个谷歌脚本中的时间列表,它反映在Web应用程序中。我从youtube.com上得到的。这是该web应用程序和google表单的屏幕截图 网络应用程序: 谷歌工作表(工作表名称:“时间选择”): 这些代码用于使用javascript和google脚本以html格式生成或输出时间 html代码: <div class="input-field col s4"> <select id="subTime">

我有一个谷歌脚本中的时间列表,它反映在Web应用程序中。我从youtube.com上得到的。这是该web应用程序和google表单的屏幕截图

网络应用程序:

谷歌工作表(工作表名称:“时间选择”):

这些代码用于使用javascript和google脚本以html格式生成或输出时间

html代码:

          <div class="input-field col s4">
             <select id="subTime">
                <option value="" disabled selected>Choose your preferred time</option>
                <?!= list1; ?> 
             </select>
             <label>Select Time</label>
          </div> <!-- CLOSE TIME FIELD -->
       </div> <!-- CLOSE ROW --> 
提前感谢您的帮助。

请尝试以下工作流程:
doGet()
函数返回一个HTML网页

->该网页有一个可选择日期的下拉列表

->在submit buton单击时,将调用一个JS函数,该函数将所选日期传递到代码的
.gs
部分

->在
.gs
中,应用程序脚本功能检查所选日期的可用时间段

->网页中包含时间的第二个下拉菜单将动态填充此特定日期的可用时间段列表

更多详细信息:

在HTML中

  • 对日期实施列表/其他选择方法,并结合提交按钮:
应用程序脚本:

  • 编写一个
    timeLimit(date)
    函数,在
    Test\u Data
    中查找特定
    date
    的所有已预留时段:
  • 并对从
    time_Selec
    t检索到的每个可能的时隙运行它,测试发生率是否高于允许的限制,并仅将未达到限制的时隙推入
    htmlListArray1
打开“时间选择”下拉列表时,只会显示包含可用时间段的列表。
注意:请相应地调整您的
doGet()
函数。

我可以问一下您的问题吗?您当前的问题是否是
timeLimit()的功能?如果是这样,您能否提供想要实现的
dataRg
dataDisable
的示例值?借此,我想思考一下问题和解决办法。如果可以的话,还可以提供一个电子表格样本吗?因为在您的屏幕截图中,我无法理解单元格值的类型。@Tanaike此处:dataRg的日志:`[19-08-07 13:14:15:863 HKT][[计划日期,计划时间],[Wed Aug 07 00:00:00 GMT+08:00 2019,8:00 AM],[Wed Aug 07 00:00 GMT+08:00 2019,9:00 AM],[Wed Aug 07 00:00 GMT+08:00 2019,10:00 AM],[星期三八月七日00:00:00 GMT+2019年08:00,上午8:00],[星期三八月七日00:00 GMT+2019年08:00,上午8:00],[星期四八月八日00:00 GMT+2019年08:00,上午9:00],[星期三八月七日00:00 GMT+2019年08:00,上午9:00]]'感谢您回复并提供了一个电子表格示例。我可以理解输入值。下一步,我想知道您想要的输出值。那么,我可以问您想要的
dataDisable
的值吗?@Tanaike正如您在下面的工作表名称中所看到的,这里有一个“Time\u Select”这将是工作表名称“Test_Data”的“Scheduled Time”列下的输入值。您认为如果某个日期的时间达到3次,它是否可能仅禁用该日期的选择中的时间?我正在考虑添加
document.getElementById(“subDate”).addEventListener(“输入”,checkTime)
google.script.run.withSuccessHandler(updateTime.timeLimit();
谢谢。在HTML部分,您的意思是在HTML代码上添加选项,而不是进入google工作表?在应用程序脚本部分,我应该创建您所述的函数,并更改我的
doGet()
函数如您上面所示?很抱歉,我有点困惑,但感谢您的帮助。我收到了此错误:
引用错误:“GetAllIndex”未定义。
。我试图调用该函数,但仍然存在相同的错误。doGet()函数是将脚本部署为Web应用程序所必需的。它需要包含
return HtmlService.createhtmloutfromfile(“test”);
,其余部分进入
时间限制()
function将从HTML部分的
JS函数动态调用它。
引用错误源于传递给函数的某些参数为空/无效(可能为空范围?).Logs有助于查找错误。因此,您修改的代码具有
var limit=3;
htmlListArray1=[]
现在将转到
timeLimit()
函数。很抱歉,我是编程初学者。另外,您是如何获得
getAllIndex(arr,val)的
function,因为在另一个代码或函数中,您从未调用过该
getAllIndexes
function。谢谢。
<?!= list1; ?>
function doGet(e){

  var ss = SpreadsheetApp.openByUrl(url);
  var ws1 = ss.getSheetByName("Time_Select");
  var list1 = ws1.getRange(1,1,ws1.getRange("A1").getDataRegion().getLastRow(),1).getValues();
  var htmlListArray1 = list1.map(function(r){return '<option>' + r[0] + '</option>'; }).join(''); 

  var tmp = HtmlService.createTemplateFromFile("test");
  tmp.list1 = htmlListArray1; 
  return tmp.evaluate();

}
function timeLimit(){

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


  var CheckLimitReached = function (T)
  {
    var records= {};
    T.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;
    Logger.log(limit_reached);
  };
   var dataDisable = CheckLimitReached(dataRg);
  Logger.log(dataDisable);

}
<select id="Date">
 <option value="" disabled selected>Choose your preferred day</option>
    ...
</select>
<input type="button" onClick="passDate()" value="Confirm date">
function passDate(date){
var dropdown=document.getElementById('Date');
var date=dropdown.options[dropdown.selectedIndex].value;
google.script.run.withSuccessHandler(onSuccess).timeLimit(date);
  }
function timeLimit(){
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Test_Data");
  var dataRg = ws.getRange(1, 7, ws.getLastRow(), 2).getValues(); 
  var myData = [];
  for(var i=0;i<dataRg.lenth:i++){
   if(dataRg[0][i]==date){
    myData.push(dataRg[1][i])
    }
   } 
function getAllIndexes(arr, val) {
    var indexes = [], i = -1;
    while ((i = arr.indexOf(val, i+1)) != -1){
        indexes.push(i);
    }
    return indexes;
}
 var ws1 = ss.getSheetByName("Time_Select");
 var list1 = ws1.getRange(1,1,ws1.getRange("A1").getDataRegion().getLastRow(),1).getValues();
 var limit=3;
 var htmlListArray1 = []
for (var j=0;j<list1.length;j++){
  if(!getAllIndexes(myData, list1[0][j]).length>=limit){
  htmlListArray1.push('<option>' + list1[0][j] + '</option>'; }); 
   }
  }
  htmlListArray1.join(''); 
  return htmlListArray1; 
  }
function onSuccess(htmlListArray1) {        
        document.getElementById('subTime').innerHTML = htmlListArray1;
      }