如何配置XLSX npm包读取Excel/CSV时保留原始日期格式?
问题
我一直在使用XLSX包读取Excel和CSV文件,但在配置日期相关参数时遇到了问题。
最初的代码如下:
const wb = XLSX.readFile(strFilePath, { type: 'file', cellDates: true, dateNF: 'mm/dd/yyyy' }); const json = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], { defval: "", raw: false, forceQuotes: true, blankrows: true, });
使用上述代码时,输入类似12/8/2022的日期,会被格式化为12/08/2022,不符合预期。
于是我将readFile的配置修改为:
const wb = XLSX.readFile(strFilePath, { type: 'file', raw:true });
但修改后,读取9/9/2022时会变成9/9/22。
请问需要添加什么配置才能读取Excel/CSV中的原始日期,避免被格式化?
解决方案
要保留原始日期格式,需针对Excel和CSV的不同特性调整配置,核心是阻止工具自动解析或格式化日期值:
处理Excel文件
Excel中的日期本质是序列化数字,要保留单元格显示的原始文本,需关闭日期解析并读取格式化文本:
const wb = XLSX.readFile(strFilePath, { cellDates: false, // 禁用日期解析,不将数字转为Date对象 cellText: true // 读取单元格的原始格式化文本 }); const json = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], { defval: "", forceQuotes: true, blankrows: true, raw: false });
处理CSV文件
CSV是纯文本格式,需禁用所有自动类型检测,强制按原始文本读取:
const wb = XLSX.readFile(strFilePath, { type: 'file', cellDates: false, // 关闭日期解析 cellText: true, // 强制读取原始文本 dateNF: false // 禁用日期格式化规则 }); const json = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], { defval: "", raw: true, // 直接取原始文本值 forceQuotes: true, blankrows: true });
关键注意事项
- 可通过文件扩展名判断是Excel还是CSV,再切换对应配置
cellText: true是核心配置,确保读取的是单元格显示的原始文本,而非解析后的值- 避免同时开启
raw: true和cellDates: true,两者会冲突导致异常解析
内容的提问来源于stack exchange,提问作者Gayathri
相关产品推荐
相关产品推荐

