SheetJS读取日期

看看我

1|0读取日期为new Date()格式

Tue May 18 2021 11:10:17 GMT+0800 (中国标准时间)
//非IE的xlsx文件的单元格日期原始值会少43秒或44秒

//读取Excel数据 function getExcelData(file, callback) { var reader = new FileReader(); var isIE = false; var isXls = false; //IE if (window.ActiveXObject || "ActiveXObject" in window) { isIE = true; } //xls文件 if (file.name.substr((file.name.lastIndexOf('.')) + 1) == 'xls') { isXls = true; } //文件加载完成后调用 reader.onload = function (e) { var data = e.target.result; //type为buffer时,IE浏览器不兼容xls //var workbook = XLSX.read(data, { // type: 'buffer' //}); //兼容IE,需把type改为binary,并对data进行转化 var workbook = XLSX.read(arrayBufferToBinaryString(data), { type: 'binary' , cellDates: true //new Date()格式-->Tue May 18 2021 14:16:52 GMT+0800 (中国标准时间) , cellText: false //不生成w }); var sheet1 = workbook.Sheets[workbook.SheetNames[0]]; var sheet1Keys = Object.keys(sheet1); //修正非IE的日期类型数据 for (var i = 0; i < sheet1Keys.length; i++) { //单元格 var cell = sheet1[sheet1Keys[i]]; //类型为日期的单元格 if (cell.t && cell.t == 'd' && !isIE && !isXls) { //非IE的xlsx文件的单元格日期原始值会少43秒,需要加上43秒 cell.v.setSeconds(cell.v.getSeconds() + 43); } } //获取json格式的Excel数据 var jsonData = XLSX.utils.sheet_to_json(sheet1, { defval: null //单元格为空时的默认值 }); console.log(jsonData); }; //加载文件 reader.readAsArrayBuffer(file); } //ArrayBuffer转BinaryString转BinaryString function arrayBufferToBinaryString(data) { var o = "", l = 0, w = 10240; for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w))); o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w))); return o; }

2|0读取日期为指定格式

//读取Excel数据 function getExcelData(file, callback) { var reader = new FileReader(); //文件加载完成后调用 reader.onload = function (e) { var data = e.target.result; var workbook = XLSX.read(data, { type: 'buffer' , cellDates: true , cellText: false }); //获取json格式的Excel数据 var jsonData = XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[0]], { defval: 'null' //单元格为空时的默认值 , raw: false , dateNF: 'yyyy-mm-dd' }); }; //加载文件 reader.readAsArrayBuffer(file); }

3|0读取日期为原有格式(建议使用这种~)

var CellsData; //符合Cells格式的数据 //读取Excel数据 function getExcelData(file, callback) { var reader = new FileReader(); var isIE = false; var isXls = false; //IE if (window.ActiveXObject || "ActiveXObject" in window) { isIE = true; } //xls文件 if (file.name.substr((file.name.lastIndexOf('.')) + 1) == 'xls') { isXls = true; } //文件加载完成后调用 reader.onload = function (e) { var data = e.target.result; //type为buffer时,IE浏览器不兼容xls //var workbook = XLSX.read(data, { // type: 'buffer' //}); //兼容IE,需把type改为binary,并对data进行转化 var workbook = XLSX.read(arrayBufferToBinaryString(data), { type: 'binary' , cellDates: true , cellText: false }); var sheet1 = workbook.Sheets[workbook.SheetNames[0]]; var sheet1Keys = Object.keys(sheet1); var dateFormate = 'yyyy-MM-dd'; console.log(sheet1); //修正非IE的日期类型数据 for (var i = 0; i < sheet1Keys.length; i++) { //单元格 var cell = sheet1[sheet1Keys[i]]; //类型为日期的单元格 if (cell.t && cell.t == 'd') { //单元格日期原始值 var date = new Date(cell.v); if (!isIE) { if (isXls) { //非IE的xls文件的日期生成jsonData会多43秒,需要减去43秒 cell.v = new Date(date.getTime() - 43 * 1000); } else { //非IE的xlsx文件的单元格日期原始值会少43秒,需要加上43秒 date = new Date(date.getTime() + 43 * 1000);; } } console.log(date); //单元格日期原始值含有HH:mm:ss if (date.getHours() > 0 || date.getMinutes() > 0 || date.getSeconds() > 0) { dateFormate = 'yyyy-MM-dd HH:mm:ss'; } } } console.log(sheet1); //获取json格式的Excel数据 var jsonData = XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[0]], { defval: null //单元格为空时的默认值 , raw: false //使用w的值而不是v , dateNF: dateFormate //日期格式 }); //获取符合Cells格式的数据 CellsData = jsonDataToCells(jsonData); console.log(jsonData); //console.log(CellsData); //do something callback(); }; //加载文件 reader.readAsArrayBuffer(file); } //ArrayBuffer转BinaryString转BinaryString function arrayBufferToBinaryString(data) { var o = "", l = 0, w = 10240; for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w))); o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w))); return o; } //转化为符合Cells格式的数据 /* [ [], //第一行数据 [], //第二行数据 [], //第三行数据 [] //第N行数据 ] */ function jsonDataToCells(jsonData) { if (jsonData.length == 0) { return []; } var cellsData = []; //用于存储所有数据 var rowData = []; //用于存储每行数据 var jsonDataKeys = Object.keys(jsonData[0]); for (var i = 0; i < jsonData.length; i++) { //IE不兼容 //cellsData.push(Object.values(jsonData[i])); for (var j = 0; j < jsonDataKeys.length; j++) { rowData.push(jsonData[i][jsonDataKeys[j]]); } cellsData.push(rowData); rowData = []; } return cellsData; } //获取Cells数据 function getCellsData(row, col) { if ((row - 2) > (CellsData.length - 1) || row < 2 || col < 1 || (col - 1) > (CellsData[0].length - 1)) { return { Value: undefined }; } var cellData = CellsData[row - 2][col - 1]; return { Value: cellData == null ? undefined : cellData }; }

__EOF__

本文作者vvull
本文链接https://www.cnblogs.com/vvull/p/14769578.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   vvull  阅读(1684)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示