用SheetJS格式化日期

时间:2018-11-05 23:02:41

标签: javascript xlsx sheetjs

预先感谢您查看此问题!我正在尝试使用SheetJS读取.xlsx文件,但是在通过Excel将其格式化为自定义“ yyyy / mm / dd hh:mm:ss”的日期列时遇到了一些麻烦。所有这些日期都显示为较大的浮动值。

以下是读取上载.xlsx文件的代码:

uploadWorkbook(e) {
    let reader = new FileReader();
    reader.readAsBinaryString(e.target.files[0]);
    reader.onload = (e) => {
        let data = e.target.result;
        let workbook = XLSX.read(data, {type: 'binary'});
        let first_sheet_name = workbook.SheetNames[0];
        let worksheet = workbook.Sheets[first_sheet_name];
        let jsonObj = XLSX.utils.sheet_to_json(worksheet);
        console.log(jsonObj);
    }
}

例如,第一个对象的日期值为43395.29775462963。如果可能的话,我甚至可以将所有单元格格式化为字符串。任何帮助将不胜感激!

谢谢大家!

3 个答案:

答案 0 :(得分:8)

这是我的方式:

 const target = e.target.result;
 const wb = XLSX.read(target,{type:'binary',cellText:false,cellDates:true});
 const wsname = wb.SheetNames[0];
 const ws = wb.Sheets[wsname];
 const data = XLSX.utils.sheet_to_json(ws, {header:1,raw:false,dateNF:'yyyy-mm-dd'});

答案 1 :(得分:3)

因此,我发现将工作表转换为JSON时传递raw选项会将所有单元格输出为字符串。这样就可以了:

let jsonObj = XLSX.utils.sheet_to_json(worksheet, {raw: false});

答案 2 :(得分:0)

我不确定这些标记是否还存在,但是目前(2019年12月),您可以添加标记“ cellDates”以将其作为日期而不是数字。

const workbook = XLSX.read( data, {
    ...
    cellDates: true,
});

这更好,因为数据类型现在是日期格式的日期,而不是日期格式的字符串。