欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于jquery的tableExportJs的导出文件(附带打印功能)

程序员文章站 2022-07-15 10:37:52
...

基于jquery的tableExportJs的导出文件(附带打印功能)

上图是根据假数据自己画的表格,用来演示导出和打印。 

导出效果图:

基于jquery的tableExportJs的导出文件(附带打印功能)

打印效果图:

基于jquery的tableExportJs的导出文件(附带打印功能) ok,开始上代码:

代码结构:

基于jquery的tableExportJs的导出文件(附带打印功能)

HTML部分:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			#printTable  th,#printTable td{
				border:1px solid #ccc;
				font-size:0.8rem;
				text-align: center;
				padding:0.3rem 0.2rem;
			}
			#printTitle{
				font-size: 1.5625rem;
				margin:20px auto;
				text-align: center;
			}
			#sceondTr td{
				text-align: left;
				background:#f5f6f7;
			}
		</style>
	</head>
	<body>
		<div class="printDataBox" id="printDataBox">
			<div id="printTitle">表格名字</div>
			<table id="printTable" style="width: 90%;margin:20px auto;border:1px solid #000; border-collapse: collapse; border-spacing: 0;">
				<thead>
					<tr id="printTheadTr"></tr>
					<tr id="sceondTr"></tr>
					<tr id="thirdTr"></tr>
				</thead>
				<tbody id="printTbody"></tbody>
			</table>
		</div>
		<div style="margin:20px auto;text-align: center;">
			<button onclick="exportTable()">导出</button>
			<button onclick="printTable()">打印</button>
		</div>
		<script src="js/jquery-1.9.1.min.js" type="text/javascript" charset="utf-8"></script>
		<script src="js/tableExport.js" type="text/javascript" charset="utf-8"></script>
		<script src="js/jquery.base64.js" type="text/javascript" charset="utf-8"></script>
		<script src="js/exportPrint.js" type="text/javascript" charset="utf-8"></script>
	</body>
</html>

 exportPrint.js部分:

var mapData = [//假数据
	{
		stationName:"收费站1",
		carList:[
			{carName:'汽车1',carNum:11,carMoney:110},
			{carName:'汽车2',carNum:12,carMoney:120},
			{carName:'汽车3',carNum:13,carMoney:130},
			{carName:'汽车4',carNum:14,carMoney:140},
			{carName:'汽车5',carNum:15,carMoney:150},
			{carName:'汽车6',carNum:16,carMoney:160}
		]
	},
	{
		stationName:"收费站2",
		carList:[
			{carName:'汽车1',carNum:21,carMoney:210},
			{carName:'汽车2',carNum:22,carMoney:220},
			{carName:'汽车3',carNum:23,carMoney:230},
			{carName:'汽车7',carNum:27,carMoney:270}
		]
	},
	{
		stationName:"收费站3",
		carList:[
			{carName:'汽车7',carNum:37,carMoney:370},
			{carName:'汽车8',carNum:38,carMoney:380},
			{carName:'汽车9',carNum:39,carMoney:390},
			{carName:'汽车0',carNum:30,carMoney:300}
		]
	}
];

restDataNewTable(mapData);//整理数据,画报表

function restDataNewTable(mapData){//整理数据
	let allCarList = [];//统计所有车
	mapData.forEach(item=>{
		allCarList = allCarList.concat(item.carList);
	})
	let obj = {},carNameList = [];
	allCarList = allCarList.reduce(function(item, next) {
	  obj[next.carName] ? '' : obj[next.carName] = true && item.push(next);
	  return item;
	}, []);//把统计的车型去重
	carNameList = Object.keys(obj);//获取所有车型的名称
	let theadThs = '<th>收费站名称</th>';//table的thead下的th数据,默认设置thead的第一个格数据为 收费站名称
	let thirdTrTds = '<td></td>'//整个表格第三行数据,默认第一个格子数据为空
	allCarList.forEach(car=>{//根据循环来渲染thead剩余数据和第三行其他数据
		theadThs+=`
			<th>${car.carName}</th><th>&nbsp;</th>
		`
		thirdTrTds+=`
			<td>车辆数</td><td>收益额</td>
		`
	})
	$("#printTheadTr").append(theadThs);//thead数据渲染
	$("#thirdTr").append(thirdTrTds);//第三行数据渲染
	let thNum = $("#printTheadTr").children().length;//thead下所有th的个数,用来设置第二行数据colspan
	let sceondTrHtml = `
		<td colspan="${thNum}">收益拆分明细</td>
	`
	$("#sceondTr").append(sceondTrHtml);//整个表格第二行数据,默认收益拆分明细
	let tbodyHtml = '';//整个tbody的数据
	mapData.forEach(station=>{//tbody下数据
		let tbodyTr = `<tr><td>${station.stationName}</td>`//行的开头为分公司名称或者收费站名称
		carNameList.forEach(carName=>{//设置其他列数据
			let flag = station.carList.some(car=>{//判断是否存在于所有的车型中
			    return car.carName === carName
			});
			if(flag){//如果存在
				station.carList.forEach(appendCar=>{
					if(appendCar.carName === carName){//直接将对应的车辆数和收益额给渲染上
						tbodyTr += `
							<td>${appendCar.carNum}</td><td>${appendCar.carMoney}</td>
						`
					}
				})
			}else{//如果不存在,则用0补齐
				tbodyTr += `
					<td>0</td><td>0</td>
				`
			}
		})
		tbodyTr += `</tr>`//tbody的行结尾
		tbodyHtml += tbodyTr
	})
	$("#printTbody").append(tbodyHtml);//渲染tbody数据
}
function exportTable(){//导出表格
	$('#printTable').tableExport({
	    type:'excel',
	    escape:'false',
	    fileName: '表格名字'
	});
}
function printTable() {//打印表格
    let div = document.createElement("div");
    let style = `
		<style>
			#printTable  th,#printTable td{
				border:1px solid #ccc;
				text-align: center;
				font-size:0.8rem;
				padding:0.3rem 0.2rem;
			}
			#printTitle{
				font-size: 1.5625rem;
				margin:20px auto;
				text-align: center;
			}
			#sceondTr td{
				text-align: left;
				background:#f5f6f7;
			}
		</style>
	`
    $(div).append($("#printDataBox").html())
    let newPage = window.open("打印窗口", "_blank");
    newPage.document.write(style + $(div).prop("outerHTML"));
    newPage.document.close();
    newPage.print();
    newPage.close();
}

代码很简单,注释也很清楚!

tableExport原文件不支持自定义文件名导出,在源码基础上做了一些小的改动,成功得到想要的文件。

源码地址:https://download.csdn.net/download/sjt1010/12713050

如有不足之处,请多多指出,谢谢!

欢迎各位大佬来踩!!