如何在自定义HTML对话框中输入日期文本,并从Google Sheets加载值?

如何在自定义HTML对话框中输入日期文本,并从Google Sheets加载值?,html,google-apps-script,Html,Google Apps Script,我正在尝试将谷歌工作表中自定义(HTML)对话框上的文本输入值更改为等于我的谷歌工作表上的值。我怎样才能做到这一点 我知道为了设置文本输入的.value,需要应用正确的日期格式。我可以在加油站使用“公用设施”服务 我曾尝试使用onload=“getDate()”事件运行一个函数,该函数使用getDate()中的var date=new date()设置值,而不是直接从工作表中获取值,但这似乎不起作用 <!DOCTYPE html> <html> <head>

我正在尝试将谷歌工作表中自定义(HTML)对话框上的文本输入值更改为等于我的谷歌工作表上的值。我怎样才能做到这一点

我知道为了设置文本输入的.value,需要应用正确的日期格式。我可以在加油站使用“公用设施”服务

我曾尝试使用
onload=“getDate()”
事件运行一个函数,该函数使用
getDate()
中的
var date=new date()
设置值,而不是直接从工作表中获取值,但这似乎不起作用

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">

    <style>
    label {font-family: verdana;}

    body {
    border: 1px solid powderblue;
    padding: 30px;
    }
    </style>
  </head>
  <body  onload="getDate()">

<form id="myForm">
  <label>Task Number:</label><br>
  <input type="text" name="taskNumber" value="">
  <br><br>
   <label>Task Date:</label><br>
  <input type="date" name="taskDate" value="" id="demo" >
  <br><br>
   <label>Customer Name:</label><br>
  <input type="text" name="customerName" value="">
  <br><br>
   <label>Customer Site:</label><br>
  <input type="text" name="customerSite" value="">
  <br><br>
   <label>Status:</label><br>
  <select name="status">
  <option value="NOSTATUS">Choose</option>
  <option value="ON HOLD">ON HOLD</option>
  <option value="SCHEDULED">SCHEDULED</option>
  <option value="RESCHEDULE">RESCHEDULE</option>
  <option value="WORK IN PROGRESS">WORK IN PROGRESS</option>
  </select>
  <br><br>
   <label>Status Date:</label><br>
  <input type="date" name="statusDate" value="">
  <br><br>
   <label>Location:</label><br>
  <input type="text" name="location" value="">
  <br><br>
   <label>Description:</label><br>
  <input type="text" name="description" value="">
  <br><br>
  <input type="button" style="font-family: verdana;" value="Submit" onclick="uploadTask()">

</form> 

  <script>
  function success(msg) {
    alert(msg);
  }

  function uploadTask(){
    var form = document.getElementById("myForm").elements;
    var obj ={};
    for(var i = 0 ; i < form.length ; i++){
        var item = form.item(i);
        obj[item.name] = item.value;
    }
    google.script.run
    .withSuccessHandler(success)
    .uploadTask(obj);

    google.script.host.close();
  }

  function getDate(){
  var ss = SpreadsheetApp.openById('1CtH3uNeSiJcRd_ZKE3iWp7TEtAO_B7uCNatGJ7rHMeg');
  var monthly = ss.getSheetByName('MONTHLY');         
  var date = monthly.getRange(1, 1).getValue(); //The value of A:1 = 10/12/2000 date 

  date = Utilities.formatDate(date, Session.getScriptTimeZone(), "YYYY-MM-dd")

  document.getElementById("demo").value = date;

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

标签{字体系列:verdana;}
身体{
边框:1px固体粉末蓝色;
填充:30px;
}
任务编号:


任务日期:


客户名称:


客户站点:


状态:
选择 暂停 预定 重新安排 正在进行的工作

状态日期:


地点:


说明:


功能成功(msg){ 警报(msg); } 函数uploadTask(){ var form=document.getElementById(“myForm”).elements; var obj={}; 对于(变量i=0;i
这次修改怎么样?我认为对你的情况有几个答案。所以,请把这看作是其中之一

修改点:
  • 在显示脚本中,HTML中有GAS脚本。不能在HTML中直接运行GAS。
    • 在本例中,我使用了
      google.script.run
    • getDate()
      中的GAS脚本已从“.html”移动到“.gs”
修改脚本: 请将“.html”文件中的
getDate()
修改为以下脚本

function getDate() {
  google.script.run.withSuccessHandler((e) => {
    document.getElementById("demo").value = e;
  }).getDate();
}
接下来,请将以下函数添加到“.gs”文件中

注:
  • “.gs”文件是您使用的项目中的脚本之一。我想它是用来打开对话框的
  • 如果“.gs”文件中有相同的函数名,请修改它
参考资料:

在脚本中,似乎希望在HTML中使用GAS。我的理解正确吗?如果使用GAS,
SpreadsheetApp.getSheetById()
会发生错误。为了正确理解你想要什么,你能提供完整的脚本吗?当然,请从中删除您的个人信息。如果您认为需要添加更多信息,也请将其添加到您的问题中。@Tanaike谢谢您的反馈,我已经添加了我想要使用的代码。简而言之,我希望将日期的值设置为电子表格中的值,并且希望每次调用html对话框时都更新该值,因为电子表格中的日期值总是在更改。再次感谢!谢谢你更新你的问题。根据你的评论和脚本,我发布了一个答案。你能确认一下吗?如果那不是你想要的,请告诉我。那时候,你能解释一下这个问题的细节吗?我想修改它。@Brandon Pillay我可以通过您的更新正确理解您的问题。也谢谢你。
function getDate() {
  var ss = SpreadsheetApp.openById('1CtH3uNeSiJcRd_ZKE3iWp7TEtAO_B7uCNatGJ7rHMeg');
  var monthly = ss.getSheetByName('MONTHLY');
  var date = monthly.getRange(1, 1).getValue(); //The value of A:1 = 10/12/2000 date
  return Utilities.formatDate(date, Session.getScriptTimeZone(), "YYYY-MM-dd");
}