html Table表格数据导出EXCEL通用工具(javaee)

论坛 期权论坛     
选择匿名的用户   2021-5-23 02:00   89   0
<p>        项目中多处需要将页面table表格导出excel,以前做法是server端写业务代码去查db,重新组织数据,生成excel,此种做法灵活性、适用性比较广,但是无法通用,鉴于此,开发一个将页面table数据直接转为excle的小工具,可以将简单的table转excel,实现所见即所得的效果,大致思路为将table读取转成json串传入后端,后端解析json串生成excel,以下为代码:</p>
<p>前端部分工具类excelExcel.js如下:</p>
<p></p>
<pre class="blockcode"><code class="language-javascript">/**
    用法:ExcelExport.export(tableId, options);
    options : {
        url: 后台处理请求的url
        type:请求类型post &amp; get, 默认post
        postKey:发起请求json数据key,默认jsonData
        getCellValue(cell): 可重载的获取cell内数据的方法
        extendCellObject(cellObject, cell)生成cell对象后,执行该方法
        ajax(json):发起请求方法,可重载
    }
*/
(function() {
    var ExcelExport &#61; {
        extend: function(destination, source) {
            for (var property in source) {
                destination[property] &#61; source[property];
            }
            return destination;
        },
        getTable: function(tid) {
            return document.getElementById(tid);
        },
        option: function (options) {
            var parent &#61; this;
            var staticOption &#61; {
                url: &#39;/dataExport&#39;,
                type: &#39;post&#39;,
                postKey: &#39;jsonData&#39;,
                fileName: &#39;excelFile&#39;,
                getCellValue: function (cell) {
                    return cell.textContent ? cell.textContent
                        : cell.innerHTML ? cell.innerHTML : &#39;&#39;;
                },
                extendCellObject: function (obj, cell) {
                    return obj;
                },
                ajax: function (data) {
                    var postData &#61; {};
                    postData[this.postKey] &#61; encodeURIComponent(data);
                    postData[&#39;dataType&#39;] &#61; &#39;json&#39;;
                    postData[&#39;fileType&#39;] &#61; &#39;xls&#39;;
                    postData[&#39;fileName&#39;] &#61; encodeURIComponent(this.fileName);
                    parent.submitData(postData, this.url, this.type);
                }
            };
            return this.extend(staticOption, options || {});
        },
        newDom: function (tag, type, name, value) {
            var dom &#61; document.createElement(tag);
            dom.type &#61; type;
            dom.value &#61; value;
            dom.name &#61; name;
            return dom;
        },
        submitData: function (data, url, method) {
            var form &#61; document.createElement(&#34;form&#34;);
            for (var d in data) {
                form.appendChild(this.newDom(&#39;input&#39;, &#39;hidden&#39;, d, data[d]));
            }
            form.action &#61; url;
            form.method &#61; method;
            form.style.display &#61; &#39;none&#39;;
            document.body.appendChild(form);
            form.submit();
        },
        toJson: function (array) {
            var json &#61; &#39;[&#39;;
            for (var i &#61; 0; i &lt; array.length; i&#43;&#43;) {
                if (i !&#61;&#61; 0) {
                     json &#43;&#61; &#39;,&#39;;
                }
                json &#43;&#61; &#39;[&#39;;
                for (var j &#61; 0; j &lt; array[i].length; j&#43;&#43;) {
                    if (j !&#61;&#61; 0) {
                        json &#43;&#61; &#39;,&#39;;
                    }
                    var obj &#61; array[i][j];
                    var attIndex &#61; 0;
                    json &#43;&#61; &#39;{&#39;;
                    for (var att in obj) {
                        if (attIndex !&#61;&#61; 0) {
                            json &#43;&#61; &#39;,&#39;;
                        }
                        attIndex &#43;&#43;;
                        json &#43;&#61; &#39;&#34;&#39; &#43; att &#43; &#39;&#34;:&#34;&#39; &#43; obj[att] &#43;&#39;&#34;&#39;;
                    }
                    json &#43;&#61; &#39;}&#39;;
                }
                json &#43;&#61; &#39;]&#39;;
            }
            json &#43;&#61; &#39;]&#39;;
            return json;
        },
        exp: function(id, optionObj) {
            var dataTable &#61; this.getTable(id);
            var options &#61; this.option(optionObj);
            var rowArry &#61; new Array(dataTable.rows.length);
            for (var i &#61; 0; i &lt; dataTable.rows.length; i&#43;&#43;) {
                var row &#61; dataTable.rows[i];
                var colArray &#61; new Array(row.cells.length);
                for (var j &#61; 0; j &lt; row.cells.length; j&#43;&#43;) {
                    var cell &#61; row.cells[j];
                    var obj &#61; {};
                    obj.value &#61; options.getCellValue(cell);
                    if (cell.colSpan &amp;&amp; cell.colSpan &gt; 1) {
                        obj.colspan &#61; cell.colSpan;
                    }
                    if (cell.rowSpan &amp;&amp; cell.rowSpan &gt; 1) {
                        obj.rowspan &#61; cell.rowSpan;
                    }
                    if (cell.style.backgroundColor) {
                        obj.backgrou
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP