1. 程式人生 > >純js的excel匯出外掛

純js的excel匯出外掛

在不影響伺服器效能的前提下前端匯出table內容為excel檔案

/**
使用示例 自動繫結 table_to_excel
<a href="#" download="交易記錄.xls"class="to_excel fjgl_top_r_05">匯出</a>

$(".to_excel").click(function(event){
	var t = Itable2excel({
		worksheet:'資料分析',
		table: $('#order-list table')
	});
	var data64 = t.uri();
	if(data64==false)
		return false;
	event.currentTarget.href = data64;
});


 */
(function($,win,dom,undef){

	var tmp  = '<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><meta charset="UTF-8"></meta><!--[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>{{tables}}</body></html>';

	var Itable2excel=function(settings){
		this.settings = $.extend({},Itable2excel.defaults,settings);
		this.template = '';
		//this.data64 = '';
		//執行
		this.run=function(){
			this.exportHandler();
			return this;
		}
	};

	/**
	 * 彈出框 預設配置 可擴充套件
	 * @type {Object}
	 */
	Itable2excel.defaults={
		worksheet:'Worksheet',
		table:[],
	};

	Itable2excel.prototype={
		//輸出base64的excel下載資源
		uri:function() {
			if($(this.template).find('tbody tr').length==0)
				return false;
			var	uri = 'data:application/vnd.ms-excel;base64,';
				return uri + this.base64();
		},

		base64:function() {
			return window.btoa(unescape(encodeURIComponent(this.template)));

		},
		//對話方塊本身事件繫結
		exportHandler:function(){
			var table_str = '';
			//資料過濾
			$.each( this.settings.table, function(i){
				var t = $('<div><table><thead></thead><tbody></tobdy></table></div>');
				t.find('thead').html($(this.tHead).html());
				t.find('tbody').append($(this.tBodies).children(':visible').clone());
				t.find('.not-print').remove(); 			// not-print 是@media print中不會列印的部分
				t.find('img').remove();					//圖片過濾
				t.find('.table_search').remove(); 		//搜尋欄過濾
				
				t.find('a').replaceWith(function (i) { 	//表格中不再需要的超連結也移除
					return this.innerHTML;
				});
				table_str +=t.html();
			});
			this.template = tmp.replace(/\{\{tables\}\}/g, table_str);
			this.template = this.template.replace(/\{\{worksheet\}\}/g, this.settings.worksheet);
		},
	};



	win['Itable2excel']=function(settings){
		var obj = new Itable2excel(settings);
		return obj.run();
	};


})(jQuery,window,document);

技術指導