最近在写xlsx上传预览的功能,遇到这个问题记录下。
1、问题:
excle文件中是日期格式的,但是解析的时候解析为了文本
2、解决办法
第一种:改excel的格式
第二种:改代码
第一步:
添加cellDates: true。
const workbook = XLSX.read(data, {
type: "binary",
cellDates: true
});
效果:
第二步:
判断是否为日期格式,如果是就format
ws.forEach((item) => {
for (const key in item) {
if (typeof item[key] === "object") {
item[key] = moment(item[key]).format("YYYY-MM-DD")
}
}
})
效果:
完整代码
const workbook = XLSX.read(data, {
type: "binary",
cellDates: true
});
// 取第一张表
const wsname = workbook.SheetNames[0];
// 生成json表格内容
const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname], {
defval: '' // 如果没有数据。显示默认值
});
// 循环 ws 取得其中的数据
// 把 ws 打印出来 就可以看得很清楚了 之后就进行自己想要的操作就可以了
console.log('ws', ws);
ws.forEach((item) => {
for (const key in item) {
if (moment(item[key], 'YYYY-MM-DD', true).isValid()) {
item[key] = moment(item[key]).format("YYYY-MM-DD")
}
}
})
const emitData = [];
const forEachCount = ws.length > 5 ? 5 : ws.length + 1;
for (let i = 0; i < forEachCount; i++) {
emitData.push(ws[i]);
}
that.$emit("getXlsxData", emitData);