【问题标题】:Format date with SheetJS使用 SheetJS 格式化日期
【发布时间】:2021-09-17 21:27:41
【问题描述】:

提前感谢您查看此问题!我正在尝试使用 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。如果可能的话,我什至可以将所有单元格格式化为字符串。任何帮助将不胜感激!

谢谢大家!

【问题讨论】:

    标签: javascript xlsx sheetjs


    【解决方案1】:

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

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

    【讨论】:

    • 我将 {raw: false} 用于 sheet_to_json 函数,但数据“12/21/1989”变为“12/12/89”和“12/21/2019”变为是“12/2119”。自动修剪年份部分。你能给出一些修复它的提示吗?
    • 我遇到了类似的问题,也不确定是否可以解决。
    • 你有解决这个@greenie @Evan 的方法吗?
    • 同样的问题,它不起作用
    【解决方案2】:

    这是我的方式:

     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'});
    

    【讨论】:

    • 很好,这就是我一直在寻找的!
    • 试过了,但我得到的日期格式为 mm/dd/yy 而不是 mm/dd/yyyy
    【解决方案3】:

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

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

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

    【讨论】:

    • 我认为这是处理日期字段的更好解决方案。
    • 时区呢?我得到的是第二天的日期而不是@Leon 表格中的日期
    • 最佳解决方案,应该被接受的答案
    【解决方案4】:

    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));
        }
    
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-15
      • 2013-04-06
      • 2012-05-05
      • 2015-09-29
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多