jsはフロントエンドを使用してExcelをエクスポートし、タイトルとフッターを設定して、特別なテーブル要件を実現します

 元のアドレス:https//blog.csdn.net/nihaoqiulinhe/article/details/77942713

最初:

js

//统计导出
	$scope.statisExport=function(){
		toOutPutExcel('statisTable', '证件发放');
	};
	//导出
	var idTmr;  
    function getExplorer() {  
        var explorer = window.navigator.userAgent ;  
        if(explorer.indexOf("MSIE")>=0){
        	//ie
            return 'ie';  
        }else if (explorer.indexOf("Firefox")>=0){ 
        	//firefox  
            return 'Firefox';  
        }else if(explorer.indexOf("Chrome")>=0){
        	//Chrome  
            return 'Chrome';  
        }else if(explorer.indexOf("Opera")>=0){
        	//Opera
            return 'Opera';  
        }else if(explorer.indexOf("Safari")>=0){  
        	//Safari  
            return 'Safari';  
        };
    };
  //设置导出的excel的标题
    var excelTitle ="表格数据";
    function toOutPutExcel(tableid, title) {// 整个表格拷贝到EXCEL中
    	excelTitle =title;
    	if (getExplorer() == 'ie') {
    		var curTbl = document.getElementById(tableid);
    		var oXL = new ActiveXObject("Excel.Application");
    		// 创建AX对象excel
    		var oWB = oXL.Workbooks.Add();
    		// 获取workbook对象
    		var xlsheet = oWB.Worksheets(1);
    		// 激活当前sheet
    		var sel = document.body.createTextRange();
    		sel.moveToElementText(curTbl);
    		// 把表格中的内容移到TextRange中
    		sel.select;
    		// 全选TextRange中内容
    		sel.execCommand("Copy");
    		// 复制TextRange中内容
    		xlsheet.Paste();
    		// 粘贴到活动的EXCEL中
    		oXL.Visible = true;
    		// 设置excel可见属性
 
    		try {
    			var fname = oXL.Application.GetSaveAsFilename("Excel.xls",
    					"Excel Spreadsheets (*.xls), *.xls");
    		} catch (e) {
    			print("Nested catch caught " + e);
    		} finally {
    			oWB.SaveAs(fname);
 
    			oWB.Close(savechanges = false);
    			// xls.visible = false;
    			oXL.Quit();
    			oXL = null;
    			// 结束excel进程,退出完成
    			// window.setInterval("Cleanup();",1);
    			idTmr = window.setInterval("Cleanup();", 1);
    		}
    	}else{
    		tableToExcel(tableid);
    	};
    };
    function Cleanup() {
    	window.clearInterval(idTmr);
    	CollectGarbage();
    };
    var tableToExcel = (function() {
    	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"><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>{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];
    		})
    	}
    	return function(table, name) {
    		if (!table.nodeType)
//    			table = document.getElementById(table)
    			table =  $("#"+table).clone();
	    		table = table[0];
	    		$(table).find(".ng-hide").remove();
    		var ctx = {
    			worksheet : excelTitle || 'Worksheet',
    			table : table.innerHTML
    		}
    		//window.location.href = uri + '77u/'+base64(format(template, ctx))
    		var titleDate= new Date().Format("yyyy-MM-dd hh-mm-ss");
    		document.getElementById("dlink").href = uri + '77u/'+base64(format(template, ctx));
            document.getElementById("dlink").download = excelTitle+titleDate+".xls";
            document.getElementById("dlink").click();
    	}
    })();

 html

<a id="dlink"  style="display:none"></a>
<table class="baselist" id="tableExps">
</table>

2番目のタイプ:ExcellentExport

<adownload="私はエクスポートされたtable.xls"href="#"οnclick= "returnExcellentExport.excel(this、'datatable'、'Sheet Name Here');">テーブルをExcelにエクスポート</a>

https://github.com/jmaister/excellentexport/blob/master/dist/excellentexport.js

質問1:エクセルシートをエクスポートする場合、銀行口座番号の数が長すぎて、エクスポートされた番号文字列が表記形式になります

解決策1:

<td style = "mso-number-format: '\ @';"> 100821199909091234 </ td>

style = "mso-number-format: '\ @';"を追加すると、解決できます。 

 

解決策2:

原来的:excelFile + = "<body> <table>";

修改是:excelFile + = '<body> <table style = "vnd.ms-excel.numberformat:@">';

style = "vnd.ms-excel.numberformat:@"は、データをテキスト形式に変換するためのものです

質問2:js出力漢字の文字化けの問題

解決策1:

原来的:excelFile + = "<head> <meta> <!-[if gte mso 9]>

修改是:excelFile + = "<head> <meta charset = 'UTF-8'> <!-[if gte mso 9]>

https://blog.csdn.net/q727810272/article/details/81326887

 

おすすめ

転載: blog.csdn.net/lv842586821/article/details/83271589