zoukankan      html  css  js  c++  java
  • js 对已知数组数据的导出EXCEL

    1. 方法一

    <a id="frontExportLogLink" href="javascript:void(0)" ng-click="exportLog()" class="btn btn-danger">导出<span class="glyphicon glyphicon-question-sign mgl10" tooltip="{{'不支持ie' | translate}}"></span></a>
    function  getExplorer() {
        var explorer = window.navigator.userAgent ;
        //ie
        if (explorer.indexOf("MSIE") >= 0) {
            return 'ie';
        }
        //firefox
        else if (explorer.indexOf("Firefox") >= 0) {
            return 'Firefox';
        }
        //Chrome
        else if(explorer.indexOf("Chrome") >= 0){
            return 'Chrome';
        }
        //Opera
        else if(explorer.indexOf("Opera") >= 0){
            return 'Opera';
        }
        //Safari
        else if(explorer.indexOf("Safari") >= 0){
            return 'Safari';
        }
    }
    vm.cacheData = "data":[
        {
            "lineNo":1,
            "msg":"test1"
        },
        {
            "lineNo":2,
            "msg":"test2"
        },
    ]
    vm.exportLog = function() {
        if(getExplorer()=='ie')
        {
            //TODO
            var oXL = new ActiveXObject("Excel.Application"),
                oWB = oXL.Workbooks.Add(),
                oSheet = oWB.ActiveSheet,
                i = 0,
                j;
    
            for(; i < vm.list.data.length; i++){
                var row = vm.list.data[i];
                j = 0;
                angular.forEach(vm.cacheData, function(item, key) {
                    oSheet.Cells(i + 1, j + 1).value = item[key];
                    j++;
                });
            }
        }
        else
        {
            var fileName = getExcelFileName();
            try {
                //方法1,2,3,
                tableToExcel(fileName, vm.cacheData);
            }
            catch(e) {
                console.log(e);
                notificationService.error('导出失败', false);
            }
        }
    }
    
    function getExcelFileName() {
        var d = new Date();
        var curYear = d.getFullYear();
        var curMonth = "" + (d.getMonth() + 1);
        var curDate = "" + d.getDate();
        var curHour = "" + d.getHours();
        var curMinute = "" + d.getMinutes();
        var curSecond = "" + d.getSeconds();
        if (curMonth.length == 1) {
            curMonth = "0" + curMonth;
        }
    
        if (curDate.length == 1) {
            curDate = "0" + curDate;
        }
    
        if (curHour.length == 1) {
            curHour = "0" + curHour;
        }
    
        if (curMinute.length == 1) {
            curMinute = "0" + curMinute;
        }
    
        if (curSecond.length == 1) {
            curSecond = "0" + curSecond;
        }
    
        var fileName = "导入错误信息" + "_" + curYear + curMonth + curDate + "_"
                + curHour + curMinute + curSecond + ".xlsx";
        return fileName;
    }
    
    var tableToExcel = function(name, data) {
        var uri = 'data:application/vnd.ms-excel;base64,',
                template = '<html><head><meta charset="UTF-8"></head><body><table style="border: 1px solid #dee5e7">{table}</table></body></html>',
                base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) },
                format = function(s, c) {
                    return s.replace(/{(w+)}/g,
                            function(m, p) { return c[p]; }) }
        var html = '<thead><tr><th style=" 200px; border: 1px solid #dee5e7"><span>行号</span></th><th style=" 500px;border: 1px solid #dee5e7"><span>错误信息</span></th></tr></thead><tbody>';
        angular.forEach(data, function(item, key) {
              html += '<tr>' +
              '    <td style="border: 1px solid #dee5e7">' +
              '      <span>' + item.lineNo + '</span>' +
              '    </td>' +
              '    <td style="border: 1px solid #dee5e7">' +
              '          <span>' + item.msg + '</span>' +
              '  </td>' +
              '  </tr>';
        });
        html += '</tbody>';
        var ctx = {worksheet: name || 'Worksheet', table: html};
        document.getElementById("frontExportLogLink").href = uri + base64(format(template, ctx));
        document.getElementById("frontExportLogLink").download = name;
        //document.getElementById("frontExportLogLink").click();
    }

    2. 方法二

    <script src="${staticPath}/lib/alasql.min.js"></script>
    <script src="${staticPath}/lib/xlsx.core.min.js"></script>
    <a id="frontExportLogLink" href="javascript:void(0)" ng-click="exportLog()" class="btn btn-danger">导出</span></a>
    vm.cacheData = "data":[
        {
            "lineNo":1,
            "msg":"test1"
        },
        {
            "lineNo":2,
            "msg":"test2"
        },
    ]
    vm.exportLog = function() {
        var fileName = getExcelFileName();
        try {
            //方法1,2,3,
            tableToExcel(fileName, vm.cacheData);
        }
        catch(e) {
            console.log(e);
            notificationService.error('导出失败', false);
        }
    }
    
    function getExcelFileName() {
        var d = new Date();
        var curYear = d.getFullYear();
        var curMonth = "" + (d.getMonth() + 1);
        var curDate = "" + d.getDate();
        var curHour = "" + d.getHours();
        var curMinute = "" + d.getMinutes();
        var curSecond = "" + d.getSeconds();
        if (curMonth.length == 1) {
            curMonth = "0" + curMonth;
        }
    
        if (curDate.length == 1) {
            curDate = "0" + curDate;
        }
    
        if (curHour.length == 1) {
            curHour = "0" + curHour;
        }
    
        if (curMinute.length == 1) {
            curMinute = "0" + curMinute;
        }
    
        if (curSecond.length == 1) {
            curSecond = "0" + curSecond;
        }
    
        var fileName = "导入错误信息" + "_" + curYear + curMonth + curDate + "_"
                + curHour + curMinute + curSecond + ".xlsx";
        return fileName;
    }
    
    var tableToExcel = function(name, data) {
        var data = angular.copy(data);
        data.unshift({lineNo: '行号', msg: '错误信息'});
        alasql('SELECT lineNo,msg INTO XLSX("' + name + '",{headers:false}) FROM ?',[data]);
    }
  • 相关阅读:
    Markdown 列表、区块、代码(三)
    Markdown 标题、段落、文本(二)
    Markdown 简介(一)
    禅道学习笔记
    地图源改变之后mxd文件打开很慢的问题
    关于iReport报表的分页
    在VC项目中附加包含目录
    类静态成员变量的使用
    UI基础--UISlider&UIProgress
    UI基础--UISwitch
  • 原文地址:https://www.cnblogs.com/floraCnblogs/p/js-export-array.html
Copyright © 2011-2022 走看看