zoukankan      html  css  js  c++  java
  • SheetJS读取日期

    看看我

    读取日期为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;
    }
    

    读取日期为指定格式

    //读取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);
    
    }
    

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

    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 };
    }
    
  • 相关阅读:
    SQL创建索引
    SQLServer最耗资源时间的SQL语句
    C# Linq删除父级的同时删除子级
    C# 根据类名创建类的实例对象
    C#利用反射实现两个类的对象之间相同属性的值的复制
    linq时间筛选以及list时间筛选
    为什么watch机制不是银弹?
    我们的前端模版引擎更新总结
    小矮人Javascript模块加载器
    Javascript模版引擎简介
  • 原文地址:https://www.cnblogs.com/vvull/p/14769578.html
Copyright © 2011-2022 走看看