xlsxStyle + xlsx.full.min 导出数据,并设置导出样式

<!DOCTYPE html>
<html>

<head>
	<title>SheetJS JS-XLSX</title>
	<meta charset="utf-8" />
</head>

<body>
	<script type="text/javascript" src="./xlsx.full.min.js"></script>
	<script type="text/javascript" src="./xlsxStyle.core.min.js"></script>
	<script type="text/javascript" src="./xlsxStyle.utils.js"></script>
	<script>

		function saveAs(obj, fileName) {
			var tmpA = document.createElement("a");
			tmpA.download = fileName || "下载";
			tmpA.href = URL.createObjectURL(obj);
			tmpA.click();
			setTimeout(function () {
				URL.revokeObjectURL(obj);
			}, 50);
		};

		const serveHead = [
			{
				'startTime': '报警开始时间'
			},
			{
				'endTime': '报警结束时间'
			},
			{
				'eventLevel': '报警等级'
			},
			{
				'mmsi': 'MMSI'
			},
			{
				'name': '船名'
			},
			{
				'alarmTime': '报警时间'
			},
			{
				'nearestCable': '海域'
			},
			{
				'sog': '船速(节)'
			},

			{
				'minDistance': '距离(米)'
			},
			{
				'alarmDescription': '描述'
			}
		];

		const serveData = [
			{
				"mmsi": 413770025,
				"name": "WANXUANCHENGHUO0859",
				"startTime": "2022-11-05 11:54:15",
				"endTime": "2022-11-05 12:00:15",
				"eventLevel": "预警",
				"details": [
					{
						"startTime": "2022-11-05 11:54:15",
						"endTime": "2022-11-05 12:00:15",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413770025,
						"name": "WANXUANCHENGHUO0859",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 11:54:15",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413770025_2022-11-05 11:54:15_2022-11-05 12:00:15_预警_WANXUANCHENGHUO0859"
					},
					{
						"startTime": "2022-11-05 11:54:15",
						"endTime": "2022-11-05 12:00:15",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413770025,
						"name": "WANXUANCHENGHUO0859",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 12:00:15",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413770025_2022-11-05 11:54:15_2022-11-05 12:00:15_预警_WANXUANCHENGHUO0859"
					}
				]
			},
			{
				"mmsi": 413989743,
				"name": "LUZAOZHUANGHUO2216",
				"startTime": "2022-11-05 09:32:41",
				"endTime": "2022-11-05 09:41:41",
				"eventLevel": "预警",
				"details": [
					{
						"startTime": "2022-11-05 09:32:41",
						"endTime": "2022-11-05 09:41:41",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413989743,
						"name": "LUZAOZHUANGHUO2216",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:38:41",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413989743_2022-11-05 09:32:41_2022-11-05 09:41:41_预警_LUZAOZHUANGHUO2216"
					},
					{
						"startTime": "2022-11-05 09:32:41",
						"endTime": "2022-11-05 09:41:41",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413989743,
						"name": "LUZAOZHUANGHUO2216",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:41:41",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413989743_2022-11-05 09:32:41_2022-11-05 09:41:41_预警_LUZAOZHUANGHUO2216"
					},
					{
						"startTime": "2022-11-05 09:32:41",
						"endTime": "2022-11-05 09:41:41",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413989743,
						"name": "LUZAOZHUANGHUO2216",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:35:41",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413989743_2022-11-05 09:32:41_2022-11-05 09:41:41_预警_LUZAOZHUANGHUO2216"
					},
					{
						"startTime": "2022-11-05 09:32:41",
						"endTime": "2022-11-05 09:41:41",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413989743,
						"name": "LUZAOZHUANGHUO2216",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:32:41",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413989743_2022-11-05 09:32:41_2022-11-05 09:41:41_预警_LUZAOZHUANGHUO2216"
					}
				]
			},
			{
				"mmsi": 413865686,
				"name": "未知",
				"startTime": "2022-11-05 11:09:46",
				"endTime": "2022-11-05 11:09:46",
				"eventLevel": "预警",
				"details": [
					{
						"startTime": "2022-11-05 11:09:46",
						"endTime": "2022-11-05 11:09:46",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413865686,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 11:09:46",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413865686_2022-11-05 11:09:46_2022-11-05 11:09:46_预警_未知"
					},
					{
						"startTime": "2022-11-05 11:09:46",
						"endTime": "2022-11-05 11:09:46",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413865686,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 11:09:46",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413865686_2022-11-05 11:09:46_2022-11-05 11:09:46_预警_未知"
					}
				]
			},
			{
				"mmsi": 413996871,
				"name": "未知",
				"startTime": "2022-11-05 09:21:16",
				"endTime": "2022-11-05 09:28:55",
				"eventLevel": "预警",
				"details": [
					{
						"startTime": "2022-11-05 09:21:16",
						"endTime": "2022-11-05 09:28:55",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413996871,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:24:05",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413996871_2022-11-05 09:21:16_2022-11-05 09:28:55_预警_未知"
					},
					{
						"startTime": "2022-11-05 09:21:16",
						"endTime": "2022-11-05 09:28:55",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413996871,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:28:55",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413996871_2022-11-05 09:21:16_2022-11-05 09:28:55_预警_未知"
					},
					{
						"startTime": "2022-11-05 09:21:16",
						"endTime": "2022-11-05 09:28:55",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413996871,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:27:19",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413996871_2022-11-05 09:21:16_2022-11-05 09:28:55_预警_未知"
					},
					{
						"startTime": "2022-11-05 09:21:16",
						"endTime": "2022-11-05 09:28:55",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413996871,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:25:17",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413996871_2022-11-05 09:21:16_2022-11-05 09:28:55_预警_未知"
					},
					{
						"startTime": "2022-11-05 09:21:16",
						"endTime": "2022-11-05 09:28:55",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413996871,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:26:17",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413996871_2022-11-05 09:21:16_2022-11-05 09:28:55_预警_未知"
					},
					{
						"startTime": "2022-11-05 09:21:16",
						"endTime": "2022-11-05 09:28:55",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413996871,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:26:47",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413996871_2022-11-05 09:21:16_2022-11-05 09:28:55_预警_未知"
					},
					{
						"startTime": "2022-11-05 09:21:16",
						"endTime": "2022-11-05 09:28:55",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413996871,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:24:45",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413996871_2022-11-05 09:21:16_2022-11-05 09:28:55_预警_未知"
					},
					{
						"startTime": "2022-11-05 09:21:16",
						"endTime": "2022-11-05 09:28:55",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413996871,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:21:16",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413996871_2022-11-05 09:21:16_2022-11-05 09:28:55_预警_未知"
					},
					{
						"startTime": "2022-11-05 09:21:16",
						"endTime": "2022-11-05 09:28:55",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413996871,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:25:47",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413996871_2022-11-05 09:21:16_2022-11-05 09:28:55_预警_未知"
					},
					{
						"startTime": "2022-11-05 09:21:16",
						"endTime": "2022-11-05 09:28:55",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413996871,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:23:28",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413996871_2022-11-05 09:21:16_2022-11-05 09:28:55_预警_未知"
					},
					{
						"startTime": "2022-11-05 09:21:16",
						"endTime": "2022-11-05 09:28:55",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413996871,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:28:24",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413996871_2022-11-05 09:21:16_2022-11-05 09:28:55_预警_未知"
					},
					{
						"startTime": "2022-11-05 09:21:16",
						"endTime": "2022-11-05 09:28:55",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413996871,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:21:46",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413996871_2022-11-05 09:21:16_2022-11-05 09:28:55_预警_未知"
					},
					{
						"startTime": "2022-11-05 09:21:16",
						"endTime": "2022-11-05 09:28:55",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413996871,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:22:53",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413996871_2022-11-05 09:21:16_2022-11-05 09:28:55_预警_未知"
					},
					{
						"startTime": "2022-11-05 09:21:16",
						"endTime": "2022-11-05 09:28:55",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413996871,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:27:52",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413996871_2022-11-05 09:21:16_2022-11-05 09:28:55_预警_未知"
					},
					{
						"startTime": "2022-11-05 09:21:16",
						"endTime": "2022-11-05 09:28:55",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413996871,
						"name": "未知",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 09:22:18",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413996871_2022-11-05 09:21:16_2022-11-05 09:28:55_预警_未知"
					}
				]
			},
			{
				"mmsi": 413842719,
				"name": "WANTIANYU1689",
				"startTime": "2022-11-05 11:18:48",
				"endTime": "2022-11-05 11:18:48",
				"eventLevel": "预警",
				"details": [
					{
						"startTime": "2022-11-05 11:18:48",
						"endTime": "2022-11-05 11:18:48",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413842719,
						"name": "WANTIANYU1689",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 11:18:48",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413842719_2022-11-05 11:18:48_2022-11-05 11:18:48_预警_WANTIANYU1689"
					},
					{
						"startTime": "2022-11-05 11:18:48",
						"endTime": "2022-11-05 11:18:48",
						"eventLevel": "预警",
						"eventType": null,
						"mmsi": 413842719,
						"name": "WANTIANYU1689",
						"nearestCable": null,
						"alarmDescription": null,
						"sog": null,
						"cog": null,
						"minDistance": null,
						"lon": null,
						"lat": null,
						"alarmTime": "2022-11-05 11:18:48",
						"beginTime": null,
						"finishTime": null,
						"reportTime": null,
						"groupByStr": "413842719_2022-11-05 11:18:48_2022-11-05 11:18:48_预警_WANTIANYU1689"
					}
				]
			}
		];

		// 数据整理
		let serveTransData = [];
		let merges = []; //合并规律
		let cow = 5; // 前五列合并
		let startRow = 0;
		let endRow = 0;
		serveData.forEach(({ details = [] }) => {
			const mapData = details.map(item => {
				let tempData = {}
				serveHead.forEach(v => {
					const [code, name] = Object.entries(v)[0];
					tempData[name] = item[code];
				});
				return tempData;
			});
			serveTransData.push(...mapData);
			endRow += details.length;
			for (let i = 0; i < cow; i++) {
				merges.push({
					// c => 列  r => 行 
					s: { c: i, r: startRow + 1 }, e: { c: i, r: endRow }
				})
			};
			startRow = endRow;
		});

		function doit(type) {

			var sheetName = 'Sheet1';
			var wb = {
				SheetNames: [sheetName],
				Sheets: {},
				Props: {}
			};
			var data = XLSX.utils.json_to_sheet(serveTransData);

			wb.Sheets[sheetName] = data;

			XSU.mergeCellsByObj(wb, sheetName, merges); 	// merges单元合并规则
			XSU.setAlignmentHorizontalAll(wb, sheetName, 'center');//垂直居中
			XSU.setAlignmentVerticalAll(wb, sheetName, 'center');//水平居中
			XSU.setFontBoldOfRows(wb, sheetName, true, '1');//设置第二行标题行加粗

			//列宽设置 1wch为1英文字符宽度
			var width = new Array(serveHead.length).fill({ wch: 20 });
			XSU.setColWidth(wb, sheetName, width);

			//转换成二进制 使用xlsx-style(XS)进行转换才能得到带样式Excel
			var wBout = xlsxStyle.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' });
			saveAs(new Blob([XSU.s2ab(wBout)]), "test.xlsx");

		}
	</script>
	<input type="submit" value="Export!" onclick="doit();">
</body>

</html>

合并规则      

      data["!merges"] = [

      //   // c => 列

      //   // r => 行

      //   纵向合并,范围是第1列的行1到行2

      //   { s: { c: 1, r: 1 }, e: { c: 1, r: 2 } }, // 纵向合并,范围是第2列的行1到行2

      //   { s: { c: 2, r: 1 }, e: { c: 2, r: 2 } }, // 纵向合并,范围是第3列的行1到行2

      //   { s: { c: 3, r: 1 }, e: { c: 3, r: 2 } }, // 纵向合并,范围是第4列的行1到行2

      //   { s: { c: 4, r: 1 }, e: { c: 4, r: 2 } }, // 纵向合并,范围是第5列的行1到行2

      //   // 第二组

      //   { s: { c: 0, r: 3 }, e: { c: 0, r: 4 } }, // 纵向合并,范围是第1列的行3到行4

      //   { s: { c: 1, r: 3 }, e: { c: 1, r: 4 } }, // 纵向合并,范围是第2列的行3到行4

      //   { s: { c: 2, r: 3 }, e: { c: 2, r: 4 } }, // 纵向合并,范围是第3列的行3到行4

      //   { s: { c: 3, r: 3 }, e: { c: 3, r: 4 } }, // 纵向合并,范围是第4列的行3到行4

      //   { s: { c: 4, r: 3 }, e: { c: 4, r: 4 } }, // 纵向合并,范围是第5列的行3到行4

      // ];

文档地址: GitHub - Ctrl-Ling/XLSX-Style-Utils: 基于SheetJS以及XLSX-Style的纯前端带样式导出表格为Excel的工具包

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值