用SheetJS格式化日期

siv*_*ivs 1 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

感谢大家!

小智 17

这是我的方式:

 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'});
Run Code Online (Sandbox Code Playgroud)

  • 对于那些想要使用点的人:`{dateNF:'yyyy"."mm"."dd'`}参考:https://github.com/SheetJS/sheetjs/issues/718#issuecomment-313465344 (2认同)

小智 11

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

const workbook = XLSX.read( data, {
    ...
    cellDates: true,
});
Run Code Online (Sandbox Code Playgroud)

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


Sid*_*813 7

JSON 对象中的 xlsx 文件数据具有日期格式,您可以尝试使用下面的示例

reader.onload = function(e) {
    var data = e.target.result;
    var workbook = XLSX.read(data, {
        header: 1,
        raw: false,
        dateNF: 'dd/MM/yyyy'
    });
    for (var i = 0; i < workbook.SheetNames.length; i++) {
        var XL_row_object = XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[i]], {
            header: 0,
            raw: false
        });
        Console.log(XL_row_object;)
        break;
    }
};
reader.readAsArrayBuffer(files);
Run Code Online (Sandbox Code Playgroud)


siv*_*ivs 6

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

let jsonObj = XLSX.utils.sheet_to_json(worksheet, {raw: false});
Run Code Online (Sandbox Code Playgroud)

  • 我对sheet_to_json函数使用{raw: false},但数据“12/21/1989”变成“12/12/89”,“12/21/2019”变成“12/2119”。修剪了年份部分。您能给一些修复它的提示吗? (3认同)

Nik*_*hil 5

e.target.result给了我未定义的数据。下面的解决方案对我有用。看一下这个。

 onFileUpload($event) {
    let reader = new FileReader();
    reader.readAsBinaryString($event.target.files[0]);
    reader.onload = (e) => {
      const target = reader.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: 0, raw: false, dateNF: 'yyyy-mm-dd HH:mm:ss' });

      console.log(JSON.stringify(data));
    }

  }
Run Code Online (Sandbox Code Playgroud)