H5 uses exceljs to replace the content according to the template and export the xlsx file

install module

npm install exceljs

npm install weixin-js-sdk

index.vue, download template, write content through exceljs, and return base64, binary stream

<template>
	<view class="content">
		<!-- <image class="logo" src="/static/logo.png"></image>
		<view class="text-area">
			<text class="title" @click="readfile">导出excel</text>
		</view> -->
	</view>
</template>
<script>
	const ExcelJS = require('exceljs')
	import wx from 'weixin-js-sdk';
	export default {
		data() {
			return {
				title: 'Hello'
			}
		},
		onLoad() {
			uni.showLoading({
				title: '文件生成中...'
			})
			this.readfile();
		},
		methods: {

			/**
			 * arrayBuffer转Base64
			 * @param buffer
			 */
			arrayBufferToBase64(buffer) {
				var binary = '';
				var bytes = new Uint8Array(buffer);
				var len = bytes.byteLength;
				for (var i = 0; i < len; i++) {
					binary += String.fromCharCode(bytes[i]);
				}
				return window.btoa(binary);
			},

			/**
			 * 格式化日期
			 * @param {string | number | Date} value 指定日期
			 * @param {string} format 格式化的规则
			 * @example
			 * ```js
			 * formatDate();
			 * formatDate(1603264465956);
			 * formatDate(1603264465956, "h:m:s");
			 * formatDate(1603264465956, "Y年M月D日");
			 * ```
			 */
			dateFormat(value = Date.now(), format = "Y-M-D h:m:s") {
				const formatNumber = n => `0${n}`.slice(-2);
				const date = new Date(value);
				const formatList = ["Y", "M", "D", "h", "m", "s"];
				const resultList = [];
				resultList.push(date.getFullYear().toString());
				resultList.push(formatNumber(date.getMonth() + 1));
				resultList.push(formatNumber(date.getDate()));
				resultList.push(formatNumber(date.getHours()));
				resultList.push(formatNumber(date.getMinutes()));
				resultList.push(formatNumber(date.getSeconds()));
				for (let i = 0; i < resultList.length; i++) {
					format = format.replace(formatList[i], resultList[i]);
				}
				return format;
			},

			//判断是否微信登陆
			isWeiXinLogin() {
				var ua = window.navigator.userAgent.toLowerCase();
				if (ua.match(/MicroMessenger/i) == 'micromessenger') {
					return true; // 微信中打开
				} else {
					return false; // 普通浏览器中打开
				}
			},

			// 下载excel模板,并替换内容,插入文本、图片、超链接、设置文件名称,并导出xlsx格式的excel文件
			readfile() {
				// alert('6:'+wx.toString());

				// 模板文件一定要是xlsx格式,exceljs不支持操作xls
				uni.request({
					url: "../../static/5s.xlsx", // 支持本地、网络路径
					method: 'GET',
					responseType: 'arraybuffer', // 获取二进制文件流
					success: res => {
						let data = res.data;
						console.log(data);


						const workbook = new ExcelJS.Workbook();

						// 前端生成Excel,只能通过load来加载二进制文件流的方法来读取excel中的单元格内容
						// 一个单元格可同时插入多张图片、图片支持超链接

						// load 方法读取 ArrayBuffer 类型 具体参考文档
						workbook.xlsx.load(data).then(() => {
							const sheet = workbook.getWorksheet(1); //获取第一个worksheet
							const imputData = [];

							// // 读取单元格信息,方式一
							// sheet.eachRow((row, idx) => { // Sheet1的内容 按row 读取
							// 	if (row.values && idx > 1) {
							// 		imputData.push({
							// 			row1: row.values[1] ? row.values[1] : '',
							// 			row2: row.values[2] ? row.values[2] : '',
							// 			row3: row.values[3] ? row.values[3] : '',
							// 		});
							// 	}
							// });

							// // 读取单元格信息,方式二
							// sheet.eachRow(function(row, rowNumber) {
							// 	var rowSize = row.cellCount;
							// 	var numValues = row.actualCellCount;
							// 	//console.log("单元格数量/实际数量:"+rowSize+"/"+numValues);
							// 	// cell.type单元格类型:6-公式 ;2-数值;3-字符串
							// 	row.eachCell(function(cell, colNumber) {
							// 		if (cell.type == 6) {
							// 			var value = cell.result;
							// 		} else {
							// 			var value = cell.value;
							// 		}
							// 		console.log('Cell ' + colNumber + ' = ' + cell
							// 			.type + " " + value);
							// 	});
							// });
							// // 这里 imputData 就是 Sheet1中的内容了
							// console.log('读取内容完成:', imputData);

							// 将数据替换到对应的单元格
							// 工具名称
							// sheet.getCell('A1').value = '5S检查表';
							// sheet.getCell('A1').alignment = {
							// 	vertical: 'middle',
							// 	horizontal: 'center'
							// };
							// sheet.getCell('A1').font = {
							// 	size: 16,
							// 	bold: true
							// }
							// 工具名称
							sheet.getCell('A1').value = '5S检查表';
							// 检查人
							sheet.getCell('B2').value = '李志伟';
							// 检查时间
							sheet.getCell('D2').value = '2022-9-8 14:52:56';
							// 检查区域
							sheet.getCell('F2').value = '车间001 > 1号设备';
							// 项数
							sheet.getCell('B3').value = '10';
							// 正常项数
							sheet.getCell('D3').value = '8';
							// 异常项数
							sheet.getCell('F3').value = '2';
							// 正常率
							sheet.getCell('H3').value = '80%';

							// 序号	检查项	点检内容	点检结果	附件
							sheet.getCell('A5').value = '1'; // 序号
							sheet.getCell('B5').value = '取用是否方便?'; // 检查项
							sheet.getCell('C5').value = '很方便'; // 点检内容
							sheet.getCell('D5').value = '√'; // 点检结果
							sheet.getCell('E5').value = ''; // 附件1
							sheet.getCell('F5').value = ''; // 附件2
							sheet.getCell('G5').value = ''; // 附件3
							sheet.getCell('H5').value = ''; // 附件4
							sheet.getCell('I5').value = ''; // 附件5
							sheet.getCell('J5').value = ''; // 附件6
							sheet.getCell('K5').value = ''; // 附件7
							sheet.getCell('L5').value = ''; // 附件8

							sheet.getCell('A6').value = '2'; // 序号
							sheet.getCell('B6').value = '物品是否完好?'; // 检查项
							sheet.getCell('C6').value = '其中一角已损坏'; // 点检内容
							sheet.getCell('D6').value = '×'; // 点检结果



							// sheet.getCell('E6').value = ''; // 附件1
							// 通过 base64  将图像添加到工作簿
							const Attach1Base64Image =
								"data:image/png;base64,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";
							const Attach1ImageId = workbook.addImage({
								base64: Attach1Base64Image,
								extension: 'png',
							});
							// 在 E6:E6 上插入图片
							sheet.addImage(Attach1ImageId, {
								tl: {
									col: 5,
									row: 5
								},
								ext: {
									width: 89,
									height: 69
								},
								editAs: 'undefined'
							});
							// 通过 base64  将图像添加到工作簿
							const playBase64Image =
								"data:image/png;base64,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";
							const playImageId = workbook.addImage({
								base64: playBase64Image,
								extension: 'png',
							});
							// 在 E6:E6 上插入播放图标及超链接
							sheet.addImage(playImageId, {
								tl: {
									col: 5.4,
									row: 5.9
								},
								ext: {
									width: 30,
									height: 30
								},
								hyperlinks: {
									hyperlink: 'http://www.ttlean.cn',
									tooltip: '点击播放视频'
								},
								editAs: 'oneCell'
							});
							sheet.getCell('F6').value = ''; // 附件2
							sheet.getCell('G6').value = ''; // 附件3
							sheet.getCell('H6').value = ''; // 附件4
							sheet.getCell('I6').value = ''; // 附件5
							sheet.getCell('J6').value = ''; // 附件6
							sheet.getCell('K6').value = ''; // 附件7
							sheet.getCell('L6').value = ''; // 附件8
							console.log('替换内容完成');

							workbook.xlsx.writeBuffer().then(buffer => {
								// console.log('输出二进制文件流完成', buffer);

								// 浏览器中,只能通过base64格式进行下载,所以先要将二进制流转换成base64
								// Excel的base64前缀,必须是xlsx格式的类型
								// 通过创建a标签下载文件,可以设定文件名

								// 浏览器不能识别二进制流,需要转换成Base64
								var base64 = this.arrayBufferToBase64(buffer);
								var download =
									"data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64," +
									base64;
								var filename = "5s检查表_" + this.dateFormat(Date.now(), 'YMDhms')

								// alert('1:'+buffer);
								// alert('2:'+base64);
								// alert('3:'+download);
								// alert('4:'+filename);

								console.log({
									// buffer: buffer,
									base64: base64,
									// base64_full: download,
								})

								if (this.isWeiXinLogin()) {
									// 微信中打开
									wx.miniProgram.postMessage({
										data: {
											buffer: buffer,
											base64: base64,
											base64_full: download,
										},
									})
									wx.miniProgram.navigateBack();

								} else {
									// 普通浏览器中打开
									const link = document.createElement('a')
									link.style.display = 'none'
									link.href = download
									link.setAttribute(
										'download',
										filename
									)
									document.body.appendChild(link)
									link.click()
								}

							});

						});

					},
				});


			}
		}
	}
</script>

<style>
	.content {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
	}

	.logo {
		height: 200rpx;
		width: 200rpx;
		margin-top: 200rpx;
		margin-left: auto;
		margin-right: auto;
		margin-bottom: 50rpx;
	}

	.text-area {
		display: flex;
		justify-content: center;
	}

	.title {
		font-size: 36rpx;
		color: #8f8f94;
	}
</style>

Guess you like

Origin blog.csdn.net/qq285679784/article/details/126839011