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

从主列表导入数据至录入表单时遇日期类型转换错误求助

问题描述

从「Billing Masterlist(账单主列表)」向「Data Entry Form(数据录入表单)」搜索导入数据时,弹出错误提示:Date is a text and cannot be coerced to a number(日期为文本类型,无法转换为数字)。表单G列设有计算E、F两列日期间隔天数的公式,但点击搜索按钮拉取数据时仍触发该错误。

已尝试格式化列,但搜索导入数据时日期仍会转为文本类型而非数字,所用代码如下:

var SPREADSHEET_NAME = "Billing Masterlist"
var SEARCH_COL_year = 0;
var SEARCH_COL_hospital = 1;

function searchStr() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var formSS = ss.getSheetByName("Data Entry Form");

  var hospital = formSS.getRange("B7").getValue();
  var year = formSS.getRange("D7").getValue();

  var values = ss.getSheetByName("Billing Masterlist").getDataRange().getValues();
  var cont = 0;
  for (var i = 0; i < values.length; i++)

  {
    var row = values[i];

    if ((row[SEARCH_COL_year] == year && row[SEARCH_COL_hospital] == hospital ))

    {

      var s = (11 + cont).toString();
      formSS.getRange("B" + s).setValue(row[2]);
      formSS.getRange("E" + s).setValue(row[4]);
      formSS.getRange("F" + s).setValue(row[5]);
      cont = cont + 1;

    }
  }
}
解决方案

问题核心是导入的日期以文本格式存入表单,而谷歌表格的日期计算公式依赖数值类型的日期(谷歌表格中日期本质是代表时间戳的数值)。只需修改代码,将导入的日期转换为谷歌表格可识别的日期对象即可解决:

把代码中设置E、F列日期的两行替换为:

formSS.getRange("E" + s).setValue(new Date(row[4]));
formSS.getRange("F" + s).setValue(new Date(row[5]));

new Date()会将文本格式的日期字符串转换为标准Date对象,谷歌表格会自动将其识别为数值类型的日期,G列的日期间隔公式就能正常计算了。

如果原数据中的日期本身是Date对象但被异常转为文本,也可以用时间戳转换为谷歌表格日期数值的方式:

// 将JS时间戳转换为谷歌表格日期数值
formSS.getRange("E" + s).setValue(row[4].getTime() / 86400 + 25569);
formSS.getRange("F" + s).setValue(row[5].getTime() / 86400 + 25569);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 01:43:15