大家在使用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以后去处理数据就好啦