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 };
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM