You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导出JSON为XLSX时如何为不同列指定不同dateNF

问题

现有如下数据:

[{billDate: "21-1-2021", createdDate: "20-2-2021", modifiedDate: "20-2-2022"}, ...]

我已将日期字符串转换为JS Date对象,现在使用XLSX.utils.json_to_sheet导出工作表时,需要为不同列指定不同的dateNF格式:

  • billDate列用dd-mm-yyyy格式
  • createdDate和modifiedDate列用mm-dd-yyyy格式

我尝试了两种方式,但都未达到预期:

方式1:columns配置

// 结果:dateNF设置完全无效
XLSX.utils.json_to_sheet(data, {
columns: [{
  name: "billDate",
  key: "billDate",
  dateNF: "dd-mm-yyyy"
},
{
  name: "createdDate",
  key: "createdDate",
  dateNF: "mm-dd-yyyy"
}]
});

方式2:结合header属性的配置

// 结果:先出现3列内容为"[object Object]"的列,后续才是原始数据列
XLSX.utils.json_to_sheet(data, {
  header: [{
   name: "billDate",
   key: "billDate",
   dateNF: "dd-mm-yyyy"
  },{
    name: "createdDate",
    key: "createdDate",
    dateNF: "mm-dd-yyyy"
  }]
});

解决方案

XLSX.utils.json_to_sheet的columns选项不支持为单独列指定dateNF,需要分两步实现差异化日期格式:

  1. 先导出基础工作表,定义列顺序与表头
  2. 遍历目标列,为每个日期单元格单独设置显示格式

具体代码示例:

// 1. 导出基础工作表,指定列顺序和表头
const ws = XLSX.utils.json_to_sheet(data, {
  columns: [
    { name: "billDate", key: "billDate" },
    { name: "createdDate", key: "createdDate" },
    { name: "modifiedDate", key: "modifiedDate" }
  ]
});

// 2. 定义各列对应的日期格式
const columnFormats = {
  billDate: "dd-mm-yyyy",
  createdDate: "mm-dd-yyyy",
  modifiedDate: "mm-dd-yyyy"
};

// 3. 映射列名到工作表的列索引
const headerRow = XLSX.utils.sheet_to_json(ws, { header: 1 })[0];
const columnMap = Object.keys(columnFormats).reduce((map, key) => {
  map[key] = headerRow.indexOf(key);
  return map;
}, {});

// 4. 遍历所有数据行,为日期单元格设置格式
const range = XLSX.utils.decode_range(ws['!ref']);
for (let row = range.s.r + 1; row <= range.e.r; row++) {
  Object.entries(columnMap).forEach(([key, colIndex]) => {
    const cellAddr = XLSX.utils.encode_cell({ r: row, c: colIndex });
    const cell = ws[cellAddr];
    // 判断是否为日期类型单元格
    if (cell && cell.t === 'd') {
      // 将JS日期转为Excel序列号,设置显示格式
      cell.v = XLSX.utils.date_to_excel(cell.v);
      cell.z = columnFormats[key];
    }
  });
}

关键说明

  • Excel的日期本质是带显示格式的数字,通过单元格的z属性指定格式
  • 先导出工作表后,通过修改z属性实现不同列的格式差异化
  • 若数据已转为JS Date对象,XLSX.utils.date_to_excel会自动转换为Excel兼容的序列号

内容的提问来源于stack exchange,提问作者Sumit M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:40:55