从谷歌电子表格检索单元格日期到HTML服务

Retrieve cell date from a google spreadsheet to HTML service

本文关键字:HTML 服务 日期 单元格 谷歌 电子表格 检索      更新时间:2023-09-26

我有一个提供HTML的谷歌应用脚本。它从谷歌电子表格中检索数据并将其呈现为 html 表。

它运行良好,除非单元格上有日期,我在 JS 控制台上收到以下错误:

Uncaught ScriptError: Se ha ejecutado la secuencia de comandos, pero el tipo de valor que se muestra es incompatible.

它是西班牙语,但意思是:执行了cmd序列,但显示的数据类型不兼容。

.HTML

<script type="text/javascript">
$(document).ready(function(){
$("#tabs").tabs();
google.script.run.withSuccessHandler(fillTabs).getAllTabsData();
}); 
</script>

我认为问题出在这个函数上,因为它在我实现它的每个脚本中都失败了:

function fillTabs(tabs) {
/*Tabs debe ser un array de objetos. cada objeto debe tener, name refiriendose a la pestaña y un array bidimensional con los datos de esa pestaña [rows][columns]*/
  var tabsDiv;//=$('#tabs');
  var table;
  var data;
  console.log("=Array tabs: "+tabs);
  for (var i = 0; i < tabs.length; i++) {
    data=tabs[i].data;
    var tabName=tabs[i].name;
    console.log("==Procesando: "+tabName);
    tabsDiv=$('#'+tabName);
    table='<table class="mytable"><tr>'    
    //iterando columnas primera fila (HEADERS)
    for(var x=0; x<data[0].length;x++){
        table+='<th>'+data[0][x]+'</th>'
    }
    table+=' <th width="20%">Action</th></tr>'; //cabeceras fin
    for( var j=1; j<data.length; j++){//iterando rows. Empezamos en la 1 porque 0=headers
      table+='<tr id="'+j+'">'
      for(var k=0; k<data[j].length;k++){//iterando columns
        table+='<td>'+data[j][k]+'</td>'
      }
      table+='<td></td></tr>'
    }
    table+='</table/>'
    tabsDiv.html(table);
  }
  $("tr:odd").addClass("odd");
};

一般事务人员

function getAllTabsData(){
  var tabNames = getColumnData('Types'); 
  var sSheet =SpreadsheetApp.openById(key);
  var tabsObject=[];
  for(var i=0; i<tabNames.length;i++){
    tabsObject.push(
      { name:tabNames[i],
       data:sSheet.getSheetByName(tabNames[i]).getDataRange().getValues()});
  }
Logger.log(tabsObject);
  return tabsObject;
}

我在 GS 部分没有任何错误,只是在 HTML 中。之后的所有 JavaScript 代码都没有被执行。

我检查了其他类似的脚本,它适用于日期。你可以在这里看到它https://script.google.com/macros/s/AKfycbwr9wDJibSknCy4thjj6Hedz8H9NOq2Ren6NLqBUhf6nzVYquFL/exec

唯一的区别是它不返回对象数组(像我一样),它只返回单个数组。

我不明白为什么这"通过聋子"不起作用,但正如我怀疑的那样,JSON 完成了这项工作

在服务器端添加 JSON.stringify 和

JSON && JSON.parse(json) || $.parseJSON(json);

在客户端工作。

我复制了那行代码。我理解||后面的部分,但我不明白为什么要使用JSON && JSON.parse。我想是为了避免在JSON不可用时尝试JSON.parse。