XLSX 文件中的日期在 SheetJs 中无法正确解析

use*_*875 6 javascript node.js sheetjs

我正在尝试使用带有日期列的sheetjs节点模块读取XLSX文件。解析后我得到的数据格式不正确

文件数据为:2020年2月17日

但 xlsx 读完后,它给了我 2/17/20。它正在改变年份格式。我的要求是按原样获取数据。

示例代码:

var workbook = XLSX.readFile('a.xlsx', {
  sheetRows: 10
});
    
var data = XLSX.utils.sheet_to_json(workbook.Sheets['Sheet1'], {
  header: 1,
  defval: '',
  blankrows: true,
  raw: false
});
Run Code Online (Sandbox Code Playgroud)

Rob*_*zie 8

这里提出了一个使用流的解决方案,但同样可以与readFile. dateNF该问题中存在的问题是选项的值sheet_to_json需要一些转义字符。

例如:

const XLSX = require('xlsx');
const filename = './Book4.xlsx';

const readOpts = { // <--- need these settings in readFile options
  cellText:false, 
  cellDates:true
};

const jsonOpts = {
  header: 1,
  defval: '',
  blankrows: true,
  raw: false,
  dateNF: 'd"/"m"/"yyyy' // <--- need dateNF in sheet_to_json options (note the escape chars)
}

const workbook = XLSX.readFile(filename, readOpts);
const worksheet = workbook.Sheets['Sheet1'];
const json = XLSX.utils.sheet_to_json(worksheet, jsonOpts);

console.log(json);
Run Code Online (Sandbox Code Playgroud)

对于此输入:

在此输入图像描述

将输出:

[
  [ 'v1', 'v2', 'today', 'formatted' ],
  [ '1', 'a', '14/8/2021', '14/8/2021' ]
]
Run Code Online (Sandbox Code Playgroud)

如果没有,dateNF: 'd"/"m","/yyyy'您会遇到与问题中描述的相同的问题:

[
  [ 'v1', 'v2', 'today', 'formatted' ],
  [ '1', 'a', '8/14/21', '8/14/21' ]
]
Run Code Online (Sandbox Code Playgroud)

两个潜在的不良副作用是:

  1. 使用cellTextcellDates选项readFile
  2. yyyy^mmm^dd请注意我在输入中的自定义格式- 该dateNF设置会覆盖任何自定义设置