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

使用xlsx库将CSV转JSON时日期格式转为数字的问题及需求

问题

需求:将指定CSV文件转换为JSON时,保留date和newdate列的原日期格式(如2022-01-01、01/02/2022)。

CSV内容:

id,name,date,newdate
1,John,2022-01-01,01/02/2022
2,Mary,2022-02-15,02/02/2022

当前使用xlsx库(import * as XLSX from 'xlsx')的实现代码:

fileReader.onload = (e) => {
   const csvData = e.target.result;
   const workbook = XLSX.read(csvData, { type: 'string' });
   const sheetName = workbook.SheetNames[0];
   const options = { header: 1, raw: true }; // specify the raw option here
   const data = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], options);
   console.log('data', data);
}

执行后结果中日期列被转为Excel序列号(如44562.22928240741),请问为何会出现这种情况?如何实现保留原日期字符串格式的转换?

原因分析

  • xlsx库默认会自动识别CSV中的日期格式内容,将其转换为Excel内部使用的日期序列号(这是Excel存储日期的标准机制)。
  • 你设置的raw: true参数,作用是保留单元格解析后的原始值,但这里的“原始值”指的是库解析后的Excel格式值,而非CSV里的原始文本。因为库在读取CSV阶段就已经完成了日期解析,raw参数无法回溯到CSV的原始字符串状态。

解决方案

要保留CSV中的原始日期字符串,核心是在读取CSV时禁用日期解析功能,具体修改如下:

修改后的代码

fileReader.onload = (e) => {
   const csvData = e.target.result;
   // 读取CSV时添加参数禁用日期解析
   const workbook = XLSX.read(csvData, { 
     type: 'string',
     cellDates: false,
     dateNF: false
   });
   const sheetName = workbook.SheetNames[0];
   const options = { header: 1 }; 
   const data = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], options);
   console.log('data', data);
}

参数说明

  • cellDates: false:阻止库将识别到的日期转换为日期对象或Excel序列号,强制保留原始内容。
  • dateNF: false:关闭日期格式的自动识别逻辑,确保CSV中的日期字符串不会被解析转换。

经过上述修改,date和newdate列就会保持CSV里的原始日期格式,不会被转为Excel序列号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:37:37