You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

App Script多词特殊ID查询返回null问题求助

问题解决方案

问题根源

服务器端getReports返回的结果中包含无法被JSON序列化的类型(如原生Date对象),导致google.script.run无法正常将数据传递到前端,最终前端收到null。单词语ID能正常返回,是因为对应结果中没有这类非序列化对象;多词语ID的结果包含这类对象,因此出现异常。


解决方案

1. 转换非序列化类型为字符串(核心修复)

修改服务器端getReports函数,将Date对象等无法序列化的类型转为格式化字符串,确保数据能正常传递到前端:

function getReports(id){
  const uId = id.trim();
  const ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("التقارير");
  const data = ss.getRange(1,1,ss.getLastRow(),ss.getLastColumn()).getValues();
  const timeZone = Session.getScriptTimeZone(); // 获取脚本时区

  const filteredData = data.filter(function(v){
    // 避免v[3]为undefined时调用trim报错
    return v[3] && v[3].trim() === uId;
  }).map(function(v){
    // 遍历每一列,将Date对象转为格式化字符串,其他类型转为字符串避免空值问题
    return v.map(item => {
      if(item instanceof Date){
        // 自定义日期格式,可根据需求调整
        return Utilities.formatDate(item, timeZone, "yyyy-MM-dd HH:mm:ss");
      }
      return item ? String(item) : "";
    });
  });
  Logger.log(filteredData);
  return filteredData;
}

2. 优化前端加载状态

在show函数中添加隐藏加载动画的逻辑,避免用户一直看到加载状态:

function show(para){
  console.log(para);
  spinner('hide'); // 隐藏加载动画
}

3. 额外:清理特殊ID的冗余字符(可选)

如果上述修复后仍有问题,可在getIds函数中对返回的特殊ID做trim处理,去除工作表单元格中可能存在的前后空格或不可见字符:

function getIds(id){
  const idN = Number(id);
  const ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("الاستعلامات");
  const data = ss.getRange(1,1,ss.getLastRow(),2).getValues();
  
  const dataFiltered = data.map(function(v){return Number(v[0])});
  const rowNumber = dataFiltered.indexOf(idN);
  if(rowNumber >= 0){
    // 去除特殊ID前后的空格和不可见字符
    return data[rowNumber][1].trim();
  } 
  
  return '404';
}

内容的提问来源于stack exchange,提问作者Abdullah Almuqbil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:15:02