利用Exceljs/file-saver实现纯前端的同一个sheet页实现导出多个表格,拼接

vue版纯前端实现导出(同一个sheet页导出多个表格)- 组合

1.安装依赖

npm install exceljs --save
npm install file-saver --save

2.引入依赖

import FileSaver from "file-saver";
const ExcelJS = require("exceljs");

3.导出测试

// 导出测试
		onExcels() {
			let baseData = [
				["", "企业编号", "M00009201004952"],
				["", "企业名称", "盛夏花开科技股份有限技术公司"],
			];
			let spareCarExcels = [
				["测试门店2", 4, 10.0, 0.0, 0, 0.0],
				["测试门店1", 4, 10.0, 0.0, 0, 0.0],
				["测试门店1", 4, 10.0, 0.0, 0, 0.0],
				["测试门店2", 4, 10.0, 0.0, 0, 0.0],
				["测试门店1", 4, 10.0, 0.0, 0, 0.0],
				["测试门店2", 4, 10.0, 0.0, 0, 0.0],
				["测试门店1", 4, 10.0, 0.0, 0, 0.0],
				["测试门店2", 4, 10.0, 0.0, 0, 0.0],
				["汇总", 4, 10.0, 0.0, 0, 0.0],
			];
			let examExcels = [
				["测试门店1", "T0001234", "2022-03-09", "2022-03-10", "银联二维码主扫", 10.0, 0.0, "32839829389fbafjiaijo", "0239023902323", "——"],
				["测试门店1", "T0001234", "2022-03-09", "2022-03-10", "银联二维码主扫", 10.0, 0.0, "32839829389fbafjiaijo", "0239023902323", "——"],
				["测试门店1", "T0001234", "2022-03-09", "2022-03-10", "银联二维码主扫", 10.0, 0.0, "32839829389fbafjiaijo", "0239023902323", "——"],
				["测试门店1", "T0001234", "2022-03-09", "2022-03-10", "银联二维码主扫", 10.0, 0.0, "32839829389fbafjiaijo", "0239023902323", "——"],
				["测试门店1", "T0001234", "2022-03-09", "2022-03-10", "银联二维码主扫", 10.0, 0.0, "32839829389fbafjiaijo", "0239023902323", "——"],
				["测试门店1", "T0001234", "2022-03-09", "2022-03-10", "银联二维码主扫", 10.0, 0.0, "32839829389fbafjiaijo", "0239023902323", "——"],
				["测试门店1", "T0001234", "2022-03-09", "2022-03-10", "银联二维码主扫", 10.0, 0.0, "32839829389fbafjiaijo", "0239023902323", "——"],
				["测试门店1", "T0001234", "2022-03-09", "2022-03-10", "银联二维码主扫", 10.0, 0.0, "32839829389fbafjiaijo", "0239023902323", "——"],
			];
			const sumData = [["", "合计", "交易笔数:6 交易金额:33.00 退款金额:0.00 手续费:0.00 结算金额:33.00"]];
			const workbook = new ExcelJS.Workbook();
			workbook.creator = "sheet1";
			workbook.lastModifiedBy = "sheet1";
			workbook.created = new Date();
			workbook.modified = new Date();
			// 将工作簿日期设置为 1904 年日期系统
			workbook.properties.date1904 = true;
			const worksheet = workbook.addWorksheet("sheet1");
			worksheet.properties.defaultColWidth = 16; // 默认列宽
			worksheet.properties.defaultRowHeight = 16; // 默认行高
			worksheet.columns = [
				// 设置列宽
				{ width: 14 },
				{ width: 14 },
				{ width: 14 },
				{ width: 14 },
				{ width: 14 },
				{ width: 14 },
				{ width: 14 },
				{ width: 22 },
				{ width: 16 },
				{ width: 16 },
				{ width: 16 },
				{ width: 16 },
			];
			//定义表格标题
			const titleRow = worksheet.getRow(1);
			titleRow.height = 120;
			const titleCell = worksheet.getCell("A1");
			worksheet.mergeCells("A1:J1");
			titleCell.value = "盛夏花开科技股份有限公司交易结算单明细";
			titleCell.font = { name: "宋体", family: 4, size: 14, bold: true }; // 字体
			titleCell.alignment = { vertical: "middle", horizontal: "center" }; //对齐
			// 定义表格标题
			worksheet.addTable({
				name: "baseTable",
				ref: "A2",
				displayName: "盛夏花开科技股份有限公司交易结算单明细",
				headerRow: false, // 在表格顶部显示标题
				filterButton: false, // 切换标题中的过滤器控件
				totalsRow: false, // 在表格底部显示总计
				style: {
					theme: "TableStyleLight12",
				},

				columns: [{ name: "NAME" }, { name: "VALUE" }],
				rows: [],
			});
			//定义基本信息标题
			const baseRow = worksheet.getRow(1);
			baseRow.height = 20;
			const baseCell = worksheet.getCell("A2");
			worksheet.mergeCells("A2:J2");
			baseCell.value = "企业基本信息";
			baseCell.font = { name: "宋体", family: 4, size: 11, bold: true }; // 字体
			baseCell.alignment = { vertical: "middle", horizontal: "left" }; //对齐
			worksheet.mergeCells("A3", "B3");
			worksheet.mergeCells("C3", "J3");
			worksheet.mergeCells("A4", "B4");
			worksheet.mergeCells("C4", "J4");
			// 定义基本信息标题
			worksheet.addTable({
				name: "baseTable",
				ref: "A3",
				displayName: "基本信息",
				headerRow: false, // 在表格顶部显示标题
				filterButton: false, // 切换标题中的过滤器控件
				totalsRow: false, // 在表格底部显示总计
				style: {
					theme: "TableStyleLight12",
				},
				columns: [{ name: "NAME" }, { name: "VALUE" }, { name: "VALUEa" }],
				rows: baseData,
			});
			//定义交易汇总清单标题
			const Examrow = worksheet.getRow(baseData.length + 3);
			Examrow.height = 20;
			const Examcell = worksheet.getCell(`A${baseData.length + 3}`);
			worksheet.mergeCells(`A${baseData.length + 3}:J${baseData.length + 3}`);
			Examcell.value = "交易汇总清单";
			Examcell.font = { name: "宋体", family: 4, size: 11, bold: true }; // 字体
			Examcell.alignment = { vertical: "middle", horizontal: "left" }; //对齐
			// 定义交易汇总清单标题
			worksheet.addTable({
				name: "examTable",
				ref: `A${baseData.length + 4}`,
				displayName: "交易汇总清单",
				headerRow: true, // 在表格顶部显示标题
				filterButton: false, // 切换标题中的过滤器控件
				totalsRow: false, // 在表格底部显示总计
				style: {
					theme: "TableStyleDark12",
					showFirstColumn: true,
				},

				columns: [
					{ name: "终端编号", totalsRowLabel: "Totals:", filterButton: true },
					{ name: "交易笔数", totalsRowFunction: "sum", filterButton: false },
					{ name: "交易金额" },
					{ name: "手续费" },
					{ name: "退款笔数" },
					{ name: "退款金额" },
				],
				rows: spareCarExcels,
			});
			//定义明细标题
			// const Sparecarrow = worksheet.getRow(spareCarExcels.length + baseData.length + 4);
			// Sparecarrow.height = 20;
			// const Sparecarcell = worksheet.getCell(`A${spareCarExcels.length + baseData.length + 4}`);
			// worksheet.mergeCells(`A${spareCarExcels.length + baseData.length + 4}:J${spareCarExcels.length + baseData.length + 4}`);
			// Sparecarcell.value = "";
			// Sparecarcell.font = { name: "宋体", family: 4, size: 11, bold: false }; // 字体
			// Sparecarcell.alignment = { vertical: "middle", horizontal: "left" }; //对齐
			// 明细
			worksheet.addTable({
				name: "spareCarTable",
				displayName: "",
				ref: `A${spareCarExcels.length + baseData.length + 5}`,
				headerRow: true, // 在表格顶部显示标题
				filterButton: false, // 切换标题中的过滤器控件
				totalsRow: false, // 在表格底部显示总计
				style: {
					theme: "TableStyleDark12",
					showFirstColumn: true,
				},
				columns: [
					{ name: "企业名称", totalsRowLabel: "Totals:", filterButton: true },
					{ name: "终端编号", totalsRowLabel: "Totals:", filterButton: true },
					{ name: "交易日期" },
					{ name: "清算日期" },
					{ name: "交易类型" },
					{ name: "交易金额" },
					{ name: "手续费" },
					{ name: "终端流水" },
					{ name: "交易流水" },
					{ name: "原交易流水号" },
					{ name: "备注" },
				],
				rows: examExcels,
			});

			worksheet.mergeCells(`A${spareCarExcels.length + baseData.length + examExcels.length + 6}`, `B${spareCarExcels.length + baseData.length + examExcels.length + 6}`);
			worksheet.mergeCells(`C${spareCarExcels.length + baseData.length + examExcels.length + 6}`, `J${spareCarExcels.length + baseData.length + examExcels.length + 6}`);

			// 合计
			worksheet.addTable({
				name: "sumTable",
				displayName: "",
				ref: `A${spareCarExcels.length + baseData.length + examExcels.length + 6}`,
				headerRow: false, // 在表格顶部显示标题
				filterButton: false, // 切换标题中的过滤器控件
				totalsRow: false, // 在表格底部显示总计
				style: {
					theme: "TableStyleLight12",
				},
				columns: [{ name: "name" }, { name: "name2" }, { name: "value" }],
				rows: sumData,
			});

			for (let i = 1; i <= spareCarExcels.length + baseData.length + examExcels.length + 6; i++) {
				let border = {
					top: { style: "thin" },
					left: { style: "thin" },
					bottom: { style: "thin" },
					right: { style: "thin" },
				};
				let alignment = { vertical: "middle", horizontal: "center" };
				worksheet.getCell(`A${i}`).border = border;
				worksheet.getCell(`B${i}`).border = border;
				worksheet.getCell(`C${i}`).border = border;
				worksheet.getCell(`D${i}`).border = border;
				worksheet.getCell(`E${i}`).border = border;
				worksheet.getCell(`F${i}`).border = border;
				worksheet.getCell(`G${i}`).border = border;
				worksheet.getCell(`H${i}`).border = border;
				worksheet.getCell(`I${i}`).border = border;
				worksheet.getCell(`J${i}`).border = border;
				worksheet.getCell(`A${i}`).alignment = alignment;
				worksheet.getCell(`B${i}`).alignment = alignment;
				worksheet.getCell(`C${i}`).alignment = alignment;
				worksheet.getCell(`D${i}`).alignment = alignment;
				worksheet.getCell(`E${i}`).alignment = alignment;
				worksheet.getCell(`F${i}`).alignment = alignment;
				worksheet.getCell(`G${i}`).alignment = alignment;
				worksheet.getCell(`H${i}`).alignment = alignment;
				worksheet.getCell(`I${i}`).alignment = alignment;
				worksheet.getCell(`J${i}`).alignment = alignment;
			}
			let fill = {
				type: "gradient",
				gradient: "path",
				center: { left: 0.5, top: 0.5 },
				stops: [
					{ position: 0, color: { argb: "bec0c0" } },
					{ position: 1, color: { argb: "bec0c0" } },
				],
			};
			let alignment = { vertical: "middle", horizontal: "left" };
			worksheet.getCell("A2").fill = fill;
			worksheet.getCell("A5").fill = fill;
			worksheet.getCell("A2").alignment = alignment;
			worksheet.getCell("A5").alignment = alignment;
			workbook.xlsx.writeBuffer().then((buffer) => {
				// eslint-disable-next-line no-undef
				FileSaver.saveAs(
					new Blob([buffer], {
						type: "application/octet-stream",
					}),
					`excle数据表.xlsx`
				);
			});
		},

4.效果

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值