封装vue导出excel组件(扩展嵌入图片、操作工作表、表格样式等功能)

        导出的excel中嵌入图片,同时还需要操作多个工作表与表格样式, 看了一些java的插件不太适合,因为我这边的需求是动态表单,字段不固定。后端的插件大部分依赖实体类注解,要不就是操作比较繁琐。又看了一些Vue导出excel的插件。大部分功能不全,不满足手里的需求。
        无意中发现了Excel.js这个工具功能还是比较全,我在他的基础上做了二次封装。方便了数据的传入、格式的设置。其实还有很多功能是可以扩展的,后期再完善吧。

目前已实现功能:

1、可以增加工作表

2、可以指定图片列,并嵌入图片

3、指定头部样式

1、先下载依赖: cnpm install exceljs file-saver -S;

2、使用说明:

## 自定义封装的Excel导出,支持增加工作表、嵌入图片 =======@杨华--2023_01_10==========
## 基于exceljs二次封装,支持exceljs的所有接口
## cnpm install exceljs file-saver -S;


<!-- 格式要求 -->
# 标题行
let column = [
         {
            title: '维修内容', 
            key: '维修内容',
            type: 'text'
         },
         {
            title: '维修图',
            key: '维修图',
            type: 'image',
            width: 200,
            height: 250
         }
      ]
# 内容格式      --ps:键需与标题行的key一致
let data = [
   {
      '维修内容': '2022年维修EPS',
      '维修图': 'http://url/name.jpg',
   }
]

# 使用教程
1、     import {createWorkBook,exportStatics,downloadWorkBook} from "@/utils/Excel/excel.js";
2、     # 创建工作簿
            let workbook = createWorkBook();//初始化基本属性
        # 创建工作表,可多次创建
            let worksheet = workbook.addWorksheet('自定义工作表名');
            workbook =  await exportStatics(workbook,worksheet,column,data);    
        # 下载Excel
            downloadWorkBook(workbook,'自定义文件名');


 3、封装代码如下:

import Excel from "exceljs";
import * as FileSaver from "file-saver";//用于客户端读写数据


	// 传入工作簿、工作表、表头、数据。
	export function exportStatics(workbook,worksheet,heard,tableData) {
		// 一、创建工作簿
		// let workbook = new Excel.Workbook();
		// setWorkbook(workbook);//初始化基本属性
		// 二、创建工作表
		// let worksheet = workbook.addWorksheet("sheet1");
			
		// 表头===================================================================================
		handleTitle(worksheet,heard);

		// 插入表格内容数据================================================================================
		handleContent(worksheet,heard,tableData);

		// 处理图片==================================================================================
        await handleImage(workbook,worksheet,heard,tableData);

		return workbook;
   	};



	// 处理表头===========================
	function handleTitle(worksheet,heard){
		// const listHearder = Object.keys(heard);
		// 按行的格式插入表头
		worksheet.insertRow(
			1,// 行的位置
			heard.map(item =>{ return item.title; })//表头组成的数组
		);

		// =====设置样式=====
		//设置标题行的填充颜色,此处可扩展
		worksheet.getRow(1).fill = {
			type: 'pattern',
			pattern:'darkTrellis',
			fgColor:{argb:'EDEDED'},
			bgColor:{argb:'EDEDED'}
		  };
		//设置行居中   
		worksheet.getRow(1).height =25;//设置行高度---下标从1开始;
		worksheet.getRow(1).alignment = { vertical: 'middle', horizontal: 'center' }; 
	}

	// 处理数据内容=======================
	function handleContent(worksheet,heard,tableData){
		tableData.forEach((item, index) => {
			worksheet.insertRow(
				index + 2,//从
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值