Necesito ayuda en el formulario de la aplicación web. Me enfrento al problema de cómo mostrar el valor en tiempo real en el formulario de la aplicación web. acerté con code.gs pero no puedo crear javascript para ejecutar el nivel de intervalo de la función.
Por favor ayúdame con esto.
function getTime(){ const ss =SpreadsheetApp.getActiveSpreadsheet() const wsData = ss.getSheetByName("Run") const emp = [Session.getActiveUser().getEmail()]; const now = new Date(); const d= wsData.getDataRange().getDisplayValues().reverse(); const emp_i = d.findIndex(r => r[1] === emp.toString()); if (emp_i == -1 && d[emp_i][4] == ""); const hour = new Date(now - new Date(d[emp_i][3])).toISOString().substr(11,8 ); return hour; } var Duration = [getTime()]; <label for="Duration">Last Activity Duration</label> <select class="w3-select" id="Duration"> <? for(let i=0;i<Duration.length;i++){ ?> <option> <?= Duration[i]; ?> </option> <? }?> </select> </div>No veo cómo getTime() devolverá una matriz:
function getTime() { const ss = SpreadsheetApp.getActiveSpreadsheet() const wsData = ss.getSheetByName("Run") const emp = [Session.getActiveUser().getEmail()]; const now = new Date(); const d = wsData.getDataRange().getDisplayValues().reverse(); const emp_i = d.findIndex(r => r[1] === emp.toString());//emp.toString() doesn't look right if (emp_i == -1 && d[emp_i][4] == "");//I don't think this line is doing anything const hour = new Date(now - new Date(d[emp_i][3])).toISOString().substr(11, 8); return hour; }pero creo que necesitas un doGet() algo como esto:
function doGet(e) { const ui = SpreadsheetApp.getUi(); let t = HtmlService.createTemplateFromFile('filename');//create a template t.Duration = getTime(); // assign global variables to the template this way return t.evaluate();//this is htmloutput }En realidad, es difícil saber qué quieres de tu código. Podría ser mejor simplemente explicar lo que quieres hacer con palabras.
Si desea recuperar la fecha en tiempo real, deberá manejar todo en el lado del cliente y usar el lado del servidor para realizar la solicitud, algo similar a esto:
Código.gs
function doGet(e) { return HtmlService.createHtmlOutputFromFile('html'); }html.html
<!DOCTYPE html> <html> <head> <base target="_top"> </head> <p id="time"></p> <body> <script> var timeDisplay = document.getElementById("time"); function getTime() { var dateString = new Date().toLocaleString("ZONE", {timeZone: "YOUR_TIMEZONE"}); var formattedString = dateString.replace(", ", " - "); timeDisplay.innerHTML = formattedString; } setInterval(getTime, 1000); </script> </body> </html>Sin embargo, si simplemente desea llamar a la función desde el código de Apps Script, debe actualizar su código del lado del cliente a esto:
<script> for (let i = 0; i < length; i++) { google.script.run.getTime(); } </script> La comunicación con las funciones de Apps Script se realiza mediante google.script.run . Esta es una API JavaScript asincrónica del lado del cliente que permite que las páginas de servicios HTML llamen a las funciones del lado del servidor.