使用js-xlsx

时间:2016-12-27 09:58:07

标签: javascript node.js excel xlsx js-xlsx

使用js-xlsx我曾多次尝试使用Date列编写XLSX文件,如下所示。每次使用Excel 2010打开XLSX文件时,日期都不会像我期望的那样呈现:它呈现为来自特定原点的天数。有没有办法直接呈现日期,而无需在Excel中格式化列?

const XLSX = require("xlsx");

var wb = { 
    Sheets: { 
        Sheet1: { 
            '!ref': 'A1:A2', 
            A1: { t: 'd', v: new Date('13 April 2014 00:00 UTC'), w: '2014-04-13' }, 
            A2: { t: 'd', v: new Date('13 April 2014 00:00 UTC'), w: '2014-04-13' }
        } 
    },
    SheetNames: [ 'Sheet1' ] 
  }

XLSX.writeFile(wb, "wbDate.xlsx", {cellDates: true});

编辑:可能的答案

最后我得到一些日期如下:

const XLSX = require("xlsx");

var wb = { 
    Sheets: { 
        Sheet1: { 
            '!ref': 'A1:B2', 
            A1: { t: 'd', v: '2016-06-21' }, 
            A2: { t: 'd', v: '2016-11-22' },
            B1: { t: 'n', v: 42542, z: 'm/d/yy' }, 
            B2: { t: 'n', v: 42696, z: 'm/d/yy' }
        } 
    },
    SheetNames: [ 'Sheet1' ] 
  }

XLSX.writeFile(wb, "wbDate.xlsx", {cellDates: false});

这给出了(Windows 7,Excel 2010,区域设置时间法国比利时):

enter image description here

奇怪的是,格式为m/d/yy,但输出呈现为d/m/yy(或dd/mm/yy?)。我没有设法获得另一种格式(但这对我来说很好)。

1 个答案:

答案 0 :(得分:1)

在GitHub上对这个问题的日期格式的各种方法进行了长时间的讨论和解释:

这是一个悬而未决的问题,所以所有问题都可能尚未解决。

请记住格式(自纪元以来的天数)不是唯一的问题。另一个问题是,时代的开始实际上是从不同系统的不同日期开始计算的,并且还必须考虑到这一点。