前端使用xlsx时读取日期数据时数据错误

11 阅读1分钟

大家在使用xlsx读取文件转成json(使用sheet_to_json方法)时可能会遇到读取日期类型,但是xlsx读取到的不准确

设置raw为true时读取的是数字 raw为false时读取的是字符串 但是跟excel里的字符串并不一致 这时就要自己去处理了,有个前提条件调用sheet_to_json时设置dateNF: "yyyy-MM-dd hh:mm:ss"

话不多说,直接贴代码吧

const baseYear = ["1899", "1900", "1904"]; // 是为了兼容时分秒类型
// 遍历工作表中所有的单元格 为了处理日期类型的单元格
for (let cell in worksheet) {
    if (Object.hasOwnProperty.call(worksheet, cell)) {
	if (cell.startsWith("!")) continue;
	const cellObj = worksheet[cell];
	if (cellObj.t === "d") {
            if (typeof cellObj.v === "string") {
		cellObj.w = cellObj.v;
            } else {
                const year = $TOOL.dateFormat(cellObj.v, "yyyy");
		// 如果baseYear里包含year代表他当前没有年份 只有时分秒
		if (baseYear.includes(year)) {
                    // 自己项目里时间转换的方法
                    cellObj.w = $TOOL.dateFormat(
                      cellObj.v,
                      "hh:mm:ss"
                    );
		} else {
                    // 年月日要用xlsx库里的,不然会差44秒,我是window系统,mac可能相差不同
                    cellObj.w = SSF.format("yyyy-mm-dd hh:mm:ss", cellObj.v);
                }
            }
        }
    }
}

问题产生的原因就是导入读取文件时,并不知道哪一列是时期类型,如果已知那一列是日期类型就可以不用此方法,在生成完json以后去处理数据就好啦

写的不好,大佬轻喷或者提出见解