关于组件 可以参考docs.sheetjs.com/docs/csf/fe… 文档 很多细节平时没注意的可以查一下
本来表格存的日期是整点整时整分
解析后(sheet_to_json)
秒数全部有差异
网上搜了很多资料 其中 github.com/SheetJS/she… 属于官方讨论了 可以参考参考 但是仍然没解决我的问题
思考良久 excel文本直接显示都是OK的 为啥日期就有差异 最后和网上结论差不多 应该是new date保存日期格式的时候产生的差值(毕竟excel基准时间会有差异)
最后曲线救国 先转csv (sheet_to_csv)
然后csv的时间是OK的 和JSON解析的年份拼接起来就是完整的日期时间
主要代码: const workbook = XLSX.read(fileResult, { type: 'binary', cellDates: true, dense: true, dateNF: 'yyyy-mm-dd hh:mm:ss', });
// 工作表名称集合
var sheetNames = workbook.SheetNames;
// 只读取第一张sheet
var worksheet = workbook.Sheets[sheetNames[0]];
//获取json格式的数据
var parseJson = XLSX.utils.sheet_to_json(worksheet);
var csvstr = XLSX.utils.sheet_to_csv(worksheet);
const parseCsvToJson = (csvStr) => {
// 分割文本为行
const lines = csvStr.trim().split('\n');
//第一行是标题行(字段名)
const headers = lines.shift().split(',');
const parsedData = lines.map((line) => {
// 分割每行的数据
const values = line.trim().split(',');
// 创建一个对象来存储当前行的数据
const rowData = {};
// 遍历字段名和字段值,并将它们对应起来
values.forEach((value, index) => {
// 使用字段名作为属性名,并去除空格
const key = headers[index].trim();
// 存储值(在这里我们假设所有值都是字符串)
rowData[key] = value.trim();
});
// 返回当前行的数据对象
return rowData;
});
return parsedData;
};
csv 转成对象数组 和上面json 两个拼起来
最后得到了excel 一致的时间
解决了最大的秒数差异问题
0:00:00 时间会固定少43秒我是直接moment(currentDate).add(43,"seconds").format('YYYY-MM-DD HH:mm:ss') 增加了43秒格式化 其它的都正常了 基本满足需求实现 没发现重大异常
以上是必须解析Excel 日期格式字段 如果可以存【文本】数据格式尽量用文本 亲测标准的文本日期字符串类型解析是OK的 强转Date也不会出错