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

Node.js中SheetJS处理XLSX日期格式化问题咨询

SheetJS + @json2csv/plainjs 日期格式化问题解决方案

1. 该场景下是否支持传入自定义日期格式?

完全支持,核心是先将带时分秒的日期字符串转换为标准Date对象,或通过@json2csv的格式化规则预处理,再交给SheetJS识别为日期类型,两种方法任选其一:

方法一:用@json2csv预处理日期

通过formatters配置把日期字符串转成Date对象,确保SheetJS能识别为日期类型:

const { Parser } = require('@json2csv/plainjs');
const XLSX = require('xlsx');

const data = [
  { date: "3/21/2024  4:15:00 PM", value: 1 },
  { date: "3/22/2024  9:30:00 AM", value: 2 }
];

// 用@json2csv将日期字符串转为Date对象
const json2csvParser = new Parser({
  formatters: {
    date: (input) => new Date(input)
  }
});

const csv = json2csvParser.parse(data);
// 将处理后的csv转为xlsx
const workbook = XLSX.read(csv, { type: 'string' });
XLSX.writeFile(workbook, 'output.xlsx');

方法二:直接用SheetJS处理数据

跳过@json2csv,手动构造工作表数据时转换日期并标记类型:

const XLSX = require('xlsx');

const data = [
  { date: "3/21/2024  4:15:00 PM", value: 1 },
  { date: "3/22/2024  9:30:00 AM", value: 2 }
];

// 转换为SheetJS可识别的格式,t='d'标记为日期类型
const wsData = [['Date', 'Value'], ...data.map(item => [
  { t: 'd', v: new Date(item.date) },
  item.value
])];

const worksheet = XLSX.utils.aoa_to_sheet(wsData);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
XLSX.writeFile(workbook, 'output.xlsx');

2. 能否传入带时分秒的日期数据,却在Excel中仅显示时间部分?

可以,通过设置SheetJS单元格的z属性(数字格式)实现:单元格存储完整的日期时间数据,但仅显示时间部分。

const XLSX = require('xlsx');

const data = [
  { date: "3/21/2024  4:15:00 PM", value: 1 },
  { date: "3/22/2024  9:30:00 AM", value: 2 }
];

const wsData = [['Date', 'Value'], ...data.map(item => [
  { 
    t: 'd', 
    v: new Date(item.date), 
    z: 'h:mm AM/PM' // 指定Excel仅显示时间格式
  },
  item.value
])];

const worksheet = XLSX.utils.aoa_to_sheet(wsData);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
XLSX.writeFile(workbook, 'output.xlsx');

双击单元格仍能看到完整的日期时间,但单元格默认只显示时分秒与上午/下午标识。

如果要结合@json2csv使用,可先生成完整日期的csv,再用SheetJS读取后修改单元格格式:

const XLSX = require('xlsx');
const { Parser } = require('@json2csv/plainjs');

const data = [
  { date: "3/21/2024  4:15:00 PM", value: 1 },
  { date: "3/22/2024  9:30:00 AM", value: 2 }
];

const json2csvParser = new Parser({
  formatters: { date: input => new Date(input) }
});
const csv = json2csvParser.parse(data);
const workbook = XLSX.read(csv, { type: 'string' });
const worksheet = workbook.Sheets[workbook.SheetNames[0]];

// 遍历日期列(假设是A列)设置时间显示格式
for (let cell in worksheet) {
  if (cell.startsWith('A') && cell !== 'A1') {
    worksheet[cell].z = 'h:mm AM/PM';
  }
}

XLSX.writeFile(workbook, 'output.xlsx');

内容的提问来源于stack exchange,提问作者Juan David Ruiz Cohen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:52:23