Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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 Google脚本Web应用程序未使用数据填充Googlesheet_Javascript_Html_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript Google脚本Web应用程序未使用数据填充Googlesheet

Javascript Google脚本Web应用程序未使用数据填充Googlesheet,javascript,html,google-apps-script,google-sheets,Javascript,Html,Google Apps Script,Google Sheets,我正在开发一个从Packt上下载的谷歌时钟应用程序。我不能让它工作。有一个HTML文件和一个.gs。我认为HTML中的javascript不起作用。要么是那样,要么是.gs代码中的doGet函数。我真的不知道。我尝试过将其切碎并隔离错误,我认为可能是HTML没有运行javascript 这是相应文档的代码 代码.gs var ssid = "1BMb3P0G0nqYHfLrDGS113_CJ-pQx0x0QHrihnalaufk"; // Change date format as per y

我正在开发一个从Packt上下载的谷歌时钟应用程序。我不能让它工作。有一个HTML文件和一个.gs。我认为HTML中的javascript不起作用。要么是那样,要么是.gs代码中的doGet函数。我真的不知道。我尝试过将其切碎并隔离错误,我认为可能是HTML没有运行javascript

这是相应文档的代码

代码.gs

var ssid = "1BMb3P0G0nqYHfLrDGS113_CJ-pQx0x0QHrihnalaufk";

// Change date format as per your preference.
var DF = "MM/dd/yyyy HH:mm:ss";
var TZ = Session.getScriptTimeZone();

var ss = SpreadsheetApp.openById(ssid);
var TimeSheet = ss.getSheetByName("TimeSheet");
var EmpSheet = ss.getSheetByName("EmployeesList");
var BackupSheet = ss.getSheetByName("Backup");
var MessageSheet = ss.getSheetByName("Message");
/**
 *  Get employee names from the EmployeesList sheet,
 *  construct the data as an array and return.
 *
 */
function getEmpList(){
  var emp = [];
  var data = EmpSheet.getDataRange().getValues();

  for(var i in data) if(data[i][0]) emp.push(data[i][0]);

  return emp;
}
function doGet(){
  var template = HtmlService.createTemplateFromFile("Timesheet");
  template.message = MessageSheet.getRange("A2").getValue();
  template.empList = getEmpList();

  var html = template.evaluate();
  return html;
}
// Returns employee shift status as an array [status, name].
function getEmpStatus(emp){
  var empData = EmpSheet.getDataRange().getValues();
  var timeData = TimeSheet.getDataRange().getValues();

  // Remove header
  timeData.shift();

  for(var i in timeData){
    if(timeData[i][1] == emp) 
      return [timeData[i][0],empData[j][1]];
  }

  // Return null if employee not in shift
  return ["",""];
}

function fmtDate_(d, format) {
// Set the default date format, if 'format' not passed.
var fmt = format || "MM/dd/yyyy HH:mm:ss";

var timeZone = Session.getScriptTimeZone();
return Utilities.formatDate(d, timeZone, fmt);
}


function postTime(name, val) {
var time = fmtDate_(new Date());

var data = TimeSheet.getDataRange().getValues();

// If 'shift start' clicked
if (val == "sb") {
    // Update start time if clicked again.
    for (var i in data) {
        if (data[i][1] == name && data[i][0] == "sb") {
            data[i][2] = time;
            TimeSheet.getRange(1, 1, data.length, data[0].length)
                .setValues(data);
            return [val, name];
        }
    };

    // Else insert new name and update start time.
    TimeSheet.appendRow([val, name, time]);

    return [val, name];
}

  // If 'break start' clicked.
  if(val == "bb"){
    for(var i in data){
      // Update break start time only if employee is in shift.
      if(data[i][0] == "sb" && data[i][1] == name ){
        data[i][0] = val;
        data[i][3] = time;

        TimeSheet.getRange(1, 1, data.length, data[0].length)
          .setValues(data);

        return [val,name];
      }
    };

    // If 'break start' clicked before 'shift start'.
    throw "Please start your shift.";
  }

  // If 'break end' clicked
  if(val == "be"){
    for(var i in data){
      if(data[i][0] == "bb" && data[i][1] == name ){
        data[i][0] = val;
        data[i][4] = time;
        TimeSheet.getRange(1, 1, data.length, data[0].length)
          .setValues(data);
        return [val,name];
      }
    };

    // If 'break end' clicked before 'break start'.
    throw "Please start your break.";
  }

  // If shift end clicked
  if(val == "se"){
    for(var i in data){
      if(data[i][1] == name 
           && (data[i][0] == "sb"|| data[i][0] == "be") ){
        var backup = [];
        backup.push(
          data[i][1],    // Name
          data[i][2],    // Shift Start
          data[i][3],    // Break Start
          data[i][4],    // Break End
          time,          // Shift end
          '=(E2-B2)*24', // Col F formula,
          '=(D2-C2)*24', // Col G formula
          '=F2-G2'       // Col H formula
        );

        /*
         * Copy Timesheet data to Backup sheet.
         * Insert a new row before row 2,
         * so that the inserted formulas ever work.
         *
         */
        BackupSheet.insertRowBefore(2);

        BackupSheet.getRange(2, 1, 1, backup.length)
          .setValues([backup]);

        /*
         * Tidy timesheet.
         * Ensure at least one data row before deleting,
         *  to avoid error.
         *
         */
        if(i<2) TimeSheet.appendRow(['']);

        // Delete copied row
        TimeSheet.deleteRow(Number(i)+1);

        return [val,name];
      }
    };

    // If 'shift end' clicked before 'break end'.
    if(data[i][0] == "bb")
      throw "Please end your break.";

    // If 'shift end' clicked without starting shift.
    throw "Please start your shift.";
  }
}
var ssid=“1BMb3P0G0nqYHfLrDGS113_CJ-PQX0x0QHRIHNAULUFK”;
//根据您的喜好更改日期格式。
var DF=“MM/dd/yyyy HH:MM:ss”;
var TZ=Session.getScriptTimeZone();
var ss=电子表格应用程序openById(ssid);
var TimeSheet=ss.getSheetByName(“时间表”);
var EmpSheet=ss.getSheetByName(“员工列表”);
var BackupSheet=ss.getSheetByName(“备份”);
var MessageSheet=ss.getSheetByName(“消息”);
/**
*从员工列表中获取员工姓名,
*将数据构造为数组并返回。
*
*/
函数getEmpList(){
var-emp=[];
var data=EmpSheet.getDataRange().getValues();
对于(数据中的var i)if(数据[i][0])emp.push(数据[i][0]);
返回emp;
}
函数doGet(){
var template=HtmlService.createTemplateFromFile(“时间表”);
template.message=MessageSheet.getRange(“A2”).getValue();
template.empList=getEmpList();
var html=template.evaluate();
返回html;
}
//将员工轮班状态返回为数组[状态,名称]。
函数getEmpStatus(emp){
var empData=EmpSheet.getDataRange().getValues();
var timeData=TimeSheet.getDataRange().getValues();
//卸下收割台
timeData.shift();
用于(时间数据中的var i){
如果(时间数据[i][1]==emp)
返回[timeData[i][0],empData[j][1];
}
//如果员工未轮班,则返回null
返回[“”,“”];
}
函数fmtDate_ud(格式){
//如果未传递“格式”,则设置默认日期格式。
var fmt=格式| |“MM/dd/yyyy HH:MM:ss”;
var timeZone=Session.getScriptTimeZone();
返回实用程序.formatDate(d,时区,fmt);
}
函数postTime(名称,val){
var time=fmtDate(新日期());
var data=TimeSheet.getDataRange().getValues();
//如果单击了“班次开始”
如果(val=“sb”){
//如果再次单击,则更新开始时间。
用于(数据中的var i){
如果(数据[i][1]==名称和数据[i][0]==“sb”){
数据[i][2]=时间;
TimeSheet.getRange(1,1,data.length,data[0].length)
.设定值(数据);
返回[val,name];
}
};
//否则,请插入新名称并更新开始时间。
时间表.appendRow([val,name,time]);
返回[val,name];
}
//如果单击“中断开始”。
如果(val=“bb”){
用于(数据中的var i){
//仅当员工轮班时更新休息开始时间。
if(数据[i][0]==“sb”&&data[i][1]==名称){
数据[i][0]=val;
数据[i][3]=时间;
TimeSheet.getRange(1,1,data.length,data[0].length)
.设定值(数据);
返回[val,name];
}
};
//如果在“班次开始”之前单击了“中断开始”。
抛出“请开始轮班”;
}
//如果单击“中断结束”
如果(val==“be”){
用于(数据中的var i){
if(数据[i][0]==“bb”&&data[i][1]==名称){
数据[i][0]=val;
数据[i][4]=时间;
TimeSheet.getRange(1,1,data.length,data[0].length)
.设定值(数据);
返回[val,name];
}
};
//如果在“中断开始”之前单击“中断结束”。
抛出“请开始休息”;
}
//如果按住shift键并单击“结束”
如果(val=“se”){
用于(数据中的var i){
如果(数据[i][1]==名称
&&(数据[i][0]=“sb”|数据[i][0]=“be”)){
var备份=[];
backup.push(
数据[i][1],//名称
数据[i][2],//班次开始
数据[i][3],//中断-启动
数据[i][4],//中断结束
时间,//班次结束
“=(E2-B2)*24',//列F公式,
“=(D2-C2)*24',//列G公式
'=F2-G2'//H列公式
);
/*
*将时间表数据复制到备份工作表。
*在第2行之前插入新行,
*这样插入的公式就可以工作了。
*
*/
背面纸张。插入行之前(2);
BackupSheet.getRange(2,1,1,backup.length)
.setValues([backup]);
/*
*整洁的时间表。
*确保删除前至少有一个数据行,
*以避免错误。
*
*/
如果(i)


工时表

最基本的问题..你试图写入的文件是公开的吗?我不这么认为。你看过这个吗?可能是你要问的:)而且,它可能必须是公开的。我知道有些条款与写入Google Drive文档有关,比如不要切碎。调试的第一步是从头开始(只添加查看错误所需的内容)。请参阅。引用错误。最基本的问题..您试图写入的文件是否为公共文件?我不这么认为。您看过这个吗?可能是您要问的:)此外,它可能必须是公开的。我知道有一些条款与写入谷歌驱动器文档有关,比如不要切掉。调试的第一步是从头开始(只添加查看错误所需的内容)。请参阅。引用错误。
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons.css" />
    <script src= "https://ajax.googleapis.com/ajax/libs /jquery/1.10.1/jquery.min.js"></script>
  </head>

  <body>
    <div>
      <fieldset style="padding-bottom:25px;">
        <legend>Timesheet</legend>
        <select id="employee" name="employee">
          <? for(var i in empList){ ?>
              <option value="<?= empList[i] ?>" > <?= empList[i] ?></option>
          <? } ?>
        </select>
        <br /><br />
        <button id="sb" value="sb"><span>Shift Start</span></button>

        <button id="bb" value="bb"><span>Break Start</span></button>

        <button id="be" value="be"><span>Break End</span></button>
        <button id="se" value="se"><span>Shift End</span></button>
      </fieldset>

      <fieldset>
        <div id="message"><?!= message ?></div>
      </fieldset>
    </div>

    <script>

     $(function() {
        // Disable all buttons.
        $('#sb,#bb,#be,#se').prop("disabled", true);

        // Set drop-down change event.
        $('#employee').change(getStatus);

        // Set buttons click event.
        $('#sb,#bb,#be,#se').click(postTime);

        getStatus();
      });

      function getStatus(){
        // Remove all previous error messages.
        $('#error,#success').remove();

        // Disable all buttons.
        $('#sb,#bb,#be,#se').prop("disabled", true);

        // Get employee shift status.
        google.script.run
          .withSuccessHandler(function(status){
            updateStatus(status);
           })
          .getEmpStatus($("#employee").val());
      }


      function postTime(){
        // Remove all previous error messages.
        $('#error,#success').remove();

        // Disable all buttons.
        $('#sb,#bb,#be,#se').prop("disabled", true);

        // Post shift time to sheet.
        google.script.run
          .withSuccessHandler(function(msg){
             updateStatus(msg[0]);
           })
          .withFailureHandler(function(msg, elm){
             showError(msg, elm);
           })
          .withUserObject(this)
          .postTime($("#employee").val(),$(this).val());
      }


      function updateStatus(status){
        // Enable appropriate buttons only.
        switch(status){
          case "sb": $('#bb,#se').prop("disabled", false); break;
          case "bb": $('#be').prop("disabled", false); break;
          case "be": $('#se').prop("disabled", false); break;
          default: $('#sb').prop("disabled", false);
        }      
      }


      function showError(msg, elm) {
        var span = $('<span id="error" class="error">' + msg + '</span>');
        $(elm).after(span);
      }

    </script>
  </body>
</html>