Browse Source

修正导出excel方法

xuwei 1 year ago
parent
commit
3407d52502

+ 226 - 0
wwwroot/Plugins/xeasyui/datagrid-export.js

@@ -0,0 +1,226 @@
+(function ($) {
+    function getRows(target) {
+        var state = $(target).data('datagrid');
+        if (state.filterSource) {
+            return state.filterSource.rows;
+        } else {
+            return state.data.rows;
+        }
+    }
+    function getFooterRows(target) {
+        var state = $(target).data('datagrid');
+        return state.data.footer || [];
+    }
+    function toHtml(target, rows, footer, caption) {
+        rows = rows || getRows(target);
+        rows = rows.concat(footer || getFooterRows(target));
+        var dg = $(target);
+        var data = ['<table border="1" rull="all" style="border-collapse:collapse">'];
+        var fields = dg.datagrid('getColumnFields', true).concat(dg.datagrid('getColumnFields', false));
+        //获取所有列信息
+        var cc = dg.datagrid('options').columns;
+        /*
+        var columns = dg.datagrid('options').columns[0];
+        var fields =[];
+        var j = 0;
+        //剔除hidden为true的字段
+        for(var i=0;i<columns.length;i++){
+            if(columns[i].hidden){}
+            else{
+                fields[j]=columns[i].field;
+                j++;
+            }
+        }
+        */
+
+        var trStyle = 'height:32px';
+        var tdStyle0 = 'vertical-align:middle;padding:0 4px';
+        if (caption) {
+            data.push('<caption>' + caption + '</caption>');
+        }
+        //写入表头信息,先判断是否为多级表头
+        for (var j = 0; j < cc.length; j++) {
+            data.push('<tr style="' + trStyle + '">');
+            var cols = cc[j];
+            for (var i = 0; i < cols.length; i++) {
+                //判断是否未隐藏字段
+                if (cols[i].hidden == true) {
+                    continue;
+                }
+                var tdStyle = tdStyle0 + ';width:' + cols[i].boxWidth + 'px;';
+                tdStyle += ';text-align:' + (cols[i].halign || cols[i].align || '');
+                //定义行列信息,初始化行和列的值为1
+                var colspans = 1;
+                var rowspans = 1;
+                if (cols[i].rowspan === undefined) {
+                } else {
+                    rowspans = cols[i].rowspan;
+                }
+                if (cols[i].colspan === undefined) {
+                } else {
+                    colspans = cols[i].colspan;
+                }
+                data.push('<td style="' + tdStyle + '" colspan="' + colspans + '" rowspan="' + rowspans + '">' + cols[i].title + '</td>');
+            }
+            data.push('</tr>');
+        }
+
+        //原方法
+        /*
+        data.push('<tr style="'+trStyle+'">');
+        for(var i=0; i<fields.length; i++){
+            var col = dg.datagrid('getColumnOption', fields[i]);
+            var tdStyle = tdStyle0 + ';width:'+col.boxWidth+'px;';
+            tdStyle += ';text-align:'+(col.halign||col.align||'');
+            data.push('<td style="'+tdStyle+'">'+col.title+'</td>');
+        }
+        data.push('</tr>');
+        */
+
+        $.map(rows, function (row) {
+            data.push('<tr style="' + trStyle + '">');
+            for (var i = 0; i < fields.length; i++) {
+                var field = fields[i];
+                var col = dg.datagrid('getColumnOption', field);
+                if (col.hidden == true) {
+                    continue;
+                }
+                var value = row[field];
+                if (value == undefined) {
+                    value = '';
+                }
+                var tdStyle = tdStyle0;
+                tdStyle += ';text-align:' + (col.align || '');
+                data.push(
+                    '<td style="' + tdStyle + '">' + value + '</td>'
+                );
+            }
+            data.push('</tr>');
+        });
+        data.push('</table>');
+        return data.join('');
+    }
+
+    function toArray(target, rows) {
+        rows = rows || getRows(target);
+        var dg = $(target);
+        var fields = dg.datagrid('getColumnFields', true).concat(dg.datagrid('getColumnFields', false));
+        var data = [];
+        var r = [];
+        for (var i = 0; i < fields.length; i++) {
+            var col = dg.datagrid('getColumnOption', fields[i]);
+            r.push(col.title);
+        }
+        data.push(r);
+        $.map(rows, function (row) {
+            var r = [];
+            for (var i = 0; i < fields.length; i++) {
+                r.push(row[fields[i]]);
+            }
+            data.push(r);
+        });
+        return data;
+    }
+
+    function print(target, param) {
+        var title = null;
+        var rows = null;
+        var footer = null;
+        var caption = null;
+        if (typeof param == 'string') {
+            title = param;
+        } else {
+            title = param['title'];
+            rows = param['rows'];
+            footer = param['footer'];
+            caption = param['caption'];
+        }
+        var newWindow = window.open('', '', 'width=800, height=500');
+        var document = newWindow.document.open();
+        var content =
+            '<!doctype html>' +
+            '<html>' +
+            '<head>' +
+            '<meta charset="utf-8">' +
+            '<title>' + title + '</title>' +
+            '</head>' +
+            '<body>' + toHtml(target, rows, footer, caption) + '</body>' +
+            '</html>';
+        document.write(content);
+        document.close();
+        newWindow.print();
+    }
+
+    function b64toBlob(data) {
+        var sliceSize = 512;
+        var chars = atob(data);
+        var byteArrays = [];
+        for (var offset = 0; offset < chars.length; offset += sliceSize) {
+            var slice = chars.slice(offset, offset + sliceSize);
+            var byteNumbers = new Array(slice.length);
+            for (var i = 0; i < slice.length; i++) {
+                byteNumbers[i] = slice.charCodeAt(i);
+            }
+            var byteArray = new Uint8Array(byteNumbers);
+            byteArrays.push(byteArray);
+        }
+        return new Blob(byteArrays, {
+            type: ''
+        });
+    }
+
+    function toExcel(target, param) {
+        var filename = null;
+        var rows = null;
+        var footer = null;
+        var caption = null;
+        var worksheet = 'Worksheet';
+        if (typeof param == 'string') {
+            filename = param;
+        } else {
+            filename = param['filename'];
+            rows = param['rows'];
+            footer = param['footer'];
+            caption = param['caption'];
+            worksheet = param['worksheet'] || 'Worksheet';
+        }
+        var dg = $(target);
+        var uri = 'data:application/vnd.ms-excel;base64,'
+            , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body>{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 table = toHtml(target, rows, footer, caption);
+        var ctx = { worksheet: worksheet, table: table };
+        var data = base64(format(template, ctx));
+        if (window.navigator.msSaveBlob) {
+            var blob = b64toBlob(data);
+            window.navigator.msSaveBlob(blob, filename);
+        } else {
+            var alink = $('<a style="display:none"></a>').appendTo('body');
+            alink[0].href = uri + data;
+            alink[0].download = filename;
+            alink[0].click();
+            alink.remove();
+        }
+    }
+
+    $.extend($.fn.datagrid.methods, {
+        toHtml: function (jq, rows) {
+            return toHtml(jq[0], rows);
+        },
+        toArray: function (jq, rows) {
+            return toArray(jq[0], rows);
+        },
+        toExcel: function (jq, param) {
+            return jq.each(function () {
+                toExcel(this, param);
+            });
+        },
+        print: function (jq, param) {
+            return jq.each(function () {
+                print(this, param);
+            });
+        }
+    });
+})(jQuery);

File diff suppressed because it is too large
+ 0 - 0
wwwroot/Plugins/xeasyui/datagrid-export.min.js


+ 2 - 1
wwwroot/Plugins/xeasyui/xeasyui.js

@@ -15,4 +15,5 @@ document.write('<link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xu
 document.write('<script type="text/javascript" src="/plugins/easyui/jquery.min.js"></script>');
 document.write('<script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"></script>');
 document.write('<script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"></script>');
-document.write('<script type="text/javascript" src="/plugins/xeasyui/xuwell.js"></script>');
+document.write('<script type="text/javascript" src="/plugins/xeasyui/datagrid-export.min.js"></script>');
+document.write('<script type="text/javascript" src="/plugins/xeasyui/xuwell.js"></script>');

+ 1 - 1
wwwroot/Plugins/xeasyui/xeasyui.min.js

@@ -1 +1 @@
-document.write('<link rel="shortcut icon" href="/img/logo.png" />');document.write('<link rel="bookmark" href="/img/logo.png" />');document.write('<link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/black/easyui.css">');document.write('<link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">');document.write('<link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">');document.write('<script type="text/javascript" src="/plugins/easyui/jquery.min.js"><\/script>');document.write('<script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"><\/script>');document.write('<script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"><\/script>');document.write('<script type="text/javascript" src="/plugins/xeasyui/xuwell.js"><\/script>');
+document.write('<link rel="shortcut icon" href="/img/logo.png" />');document.write('<link rel="bookmark" href="/img/logo.png" />');document.write('<link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/black/easyui.css">');document.write('<link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">');document.write('<link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">');document.write('<script type="text/javascript" src="/plugins/easyui/jquery.min.js"><\/script>');document.write('<script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"><\/script>');document.write('<script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"><\/script>');document.write('<script type="text/javascript" src="/plugins/xeasyui/datagrid-export.min.js"><\/script>');document.write('<script type="text/javascript" src="/plugins/xeasyui/xuwell.js"><\/script>');

+ 14 - 0
wwwroot/bundleconfig.json

@@ -0,0 +1,14 @@
+[
+  {
+    "outputFileName": "Plugins/xeasyui/xeasyui.min.js",
+    "inputFiles": [
+      "Plugins/xeasyui/xeasyui.js"
+    ]
+  },
+  {
+    "outputFileName": "Plugins/xeasyui/datagrid-export.min.js",
+    "inputFiles": [
+      "Plugins/xeasyui/datagrid-export.js"
+    ]
+  }
+]

+ 16 - 14
wwwroot/mes/rpt/rpt304/rpt_index.html

@@ -226,20 +226,22 @@
 
 		//导出
 		function tbExport() {
-			//加载表头
-			var fields1 = $('#DataGridMaster').datagrid('getColumnFields');
-			var fields2 = $('#DataGridMaster').datagrid('getColumnFields', true);
-			var fields = fields2.concat(fields1);
-			var headers = [];
-			for (var i = 0; i < fields.length; i++) {
-				//headers.push($('#DataGridMaster').datagrid('getColumnOption', fields[i])['title']);
-				headers.push(fields[i]);
-			}
-				$('#DataGridMaster').datagridExport({
-					headers: headers,
-					fileName: '导出数据_' + $("#datebeginMaster").datetimebox("getValue") + '_' + $("#dateendMaster").datetimebox("getValue")+'_(卫生陶瓷欠点).xls',
-					workSheet: '卫生陶瓷欠点'
-				});
+			////加载表头
+			//var fields1 = $('#DataGridMaster').datagrid('getColumnFields');
+			//var fields2 = $('#DataGridMaster').datagrid('getColumnFields', true);
+			//var fields = fields2.concat(fields1);
+			//var headers = [];
+			//for (var i = 0; i < fields.length; i++) {
+			//	//headers.push($('#DataGridMaster').datagrid('getColumnOption', fields[i])['title']);
+			//	headers.push(fields[i]);
+			//}
+			//	$('#DataGridMaster').datagridExport({
+			//		headers: headers,
+			//		fileName: '导出数据_' + $("#datebeginMaster").datetimebox("getValue") + '_' + $("#dateendMaster").datetimebox("getValue")+'_(卫生陶瓷欠点).xls',
+			//		workSheet: '卫生陶瓷欠点'
+			//	});
+
+            $('#DataGridMaster').datagrid('toExcel', 'dg.xls');	
 		}
         //帮助事件
         function tbHelp() {

Some files were not shown because too many files changed in this diff