前言:使用excel模板导出excel的好处在于可以事先在模板上定义颜色、格式等,适用于模板设计得比较灵活复杂的场景

一.添加jar包

        <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.2.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>3.2.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>3.2.0</version></dependency>

二.添加工具类

package com.xinke.sunshine_ebid.common.utils;import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;public class EasyPoiUtils {private EasyPoiUtils() {}public static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {try {fileName += ".xls";response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));response.setHeader("FileName", URLEncoder.encode(fileName, "utf-8"));response.setHeader("Access-Control-Expose-Headers", "FileName");workbook.write(response.getOutputStream());} catch (IOException e) {throw new RuntimeException(e);}}public static void downLoad2007Excel(String fileName, HttpServletResponse response, Workbook workbook) {try {fileName += ".xlsx";response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));response.setHeader("FileName", URLEncoder.encode(fileName, "utf-8"));response.setHeader("Access-Control-Expose-Headers", "FileName");workbook.write(response.getOutputStream());} catch (IOException e) {throw new RuntimeException(e);}}public static <T> void defaultExport(List<T> dataList, Class<?> clz, String fileName, HttpServletResponse response, ExportParams exportParams) {Workbook workbook = ExcelExportUtil.exportExcel(exportParams, clz, dataList);if (workbook != null) {downLoadExcel(fileName, response, workbook);}}public static <T> void exportExcel(List<T> dataList, String title, String sheetName, Class<?> clz, String fileName, boolean isCreateHeader, HttpServletResponse response) {ExportParams exportParams = new ExportParams(title, sheetName);exportParams.setCreateHeadRows(isCreateHeader);defaultExport(dataList, clz, fileName, response, exportParams);}public static <T> void exportExcel(List<T> dataList, String title, String sheetName, Class<?> clz, String fileName, HttpServletResponse response) {defaultExport(dataList, clz, fileName, response, new ExportParams(title, sheetName));}private static void defaultExport(List<Map<String, Object>> dataList, String fileName, HttpServletResponse response) {Workbook workbook = ExcelExportUtil.exportExcel(dataList, ExcelType.HSSF);if (workbook != null) {downLoadExcel(fileName, response, workbook);}}public static void exportExcel(List<Map<String, Object>> dataList, String fileName, HttpServletResponse response) {defaultExport(dataList, fileName, response);}public static <T> List<T> importExcel(String filePath, Integer titleRows, Integer headerRows, Class<T> clz) {if (StringUtils.isBlank(filePath)) {return null;}ImportParams params = new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);try {return ExcelImportUtil.importExcel(new File(filePath), clz, params);} catch (Exception e) {throw new RuntimeException(e.getMessage());}}public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> clz) {if (file == null) {return null;}ImportParams params = new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);try {return ExcelImportUtil.importExcel(file.getInputStream(), clz, params);} catch (Exception e) {throw new RuntimeException(e);}}
}

三.制作模板

将要替换的参数用{{}}包括起来,集合类型的遍历数据用{{!fe:集合名 t.参数名1 t.参数名2}}这种形式遍历,多sheet可使用,需要居中或者颜色设置等均可以在模板上直接修改

四.代码应用

集合类

package com.xinke.sunshine_ebid.dal.entity;import lombok.Data;@Data
public class TestEntity {private String name;private String phone;private String address;
}

控制层

package com.xinke.sunshine_ebid.webapp;import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import com.xinke.sunshine_ebid.common.utils.EasyPoiUtils;
import com.xinke.sunshine_ebid.service.TestService;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;@CrossOrigin
@RestController
@RequestMapping(value = "/Test")
public class TestController {@Resourceprivate TestService testService;/*** 使用Excel模板导出excel表格* @param response* @throws Exception*/@GetMapping("/test")public void test(HttpServletResponse response) throws Exception{// 使用map来封装参数Map<String, Object> map = testService.test();// 模板路径TemplateExportParams params = new TemplateExportParams("fileRecord/template/excel/test1.xlsx", true);String fileName = "导出来的报表名称";Workbook workbook = ExcelExportUtil.exportExcel(params, map);workbook.setForceFormulaRecalculation(true);EasyPoiUtils.downLoad2007Excel(fileName, response, workbook);}
}

业务逻辑层

package com.xinke.sunshine_ebid.service;import com.xinke.sunshine_ebid.common.utils.CustomXWPFDocument;
import com.xinke.sunshine_ebid.common.utils.WordUtil;
import com.xinke.sunshine_ebid.dal.entity.TestEntity;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.apache.poi.xwpf.usermodel.*;
import org.springframework.stereotype.Service;import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Service
public class TestService {public Map<String,Object> test() throws Exception{// 封装参数Map<String, Object> params = new HashMap<>();params.put("date","2023年3月7日");List<TestEntity> list = new ArrayList<>();TestEntity test = new TestEntity();test.setName("瓜");test.setPhone("18888888888");test.setAddress("PD");list.add(test);TestEntity test2 = new TestEntity();test2.setName("瓜2");test2.setPhone("1999999999");test2.setAddress("PD2");list.add(test2);params.put("list",list);return params;}
}

五.测试

localhost:本地端口/Test/test

导出成功

使用EasyPoi利用excel模板导出excel表格下载相关推荐

  1. .Net NPOI 根据excel模板导出excel、直接生成excel

    一.根据Excel模板导出excel 1.导入NPOI.dll  2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...

  2. java 根据excel模板导出excel

    java 根据excel模板导出excel 由于项目需求,最近做了一个需要根据查询接口导出excel表格数据的需求 pom依赖: <dependency><groupId>or ...

  3. java 分析excel模板,java 根据excel模板导出excel

    java 根据excel模板导出excel 由于项目需求,最近做了一个需要根据查询接口导出excel表格数据的需求 pom依赖: org.apache.poi poi 3.16 org.apache. ...

  4. springboot+poi开发excel导出 加载Excel模板导出 Excel批量导出详解

    提到Excel导出功能,可能很多人都使用springmvc框架做过,笔者今天要给大家分享的是基于springBoot开发Excel复杂模板导出功能(所谓复杂模板指在模板里的特定表头里有不同的单元格合并 ...

  5. 基于easypoi实现自定义模板导出excel

    项目中需要做一个统计报表功能,实现各种Excel报表数据导出.要求表头能够动态配置,表数据通过存储过程实现,也要求能够动态配置. 技术选型: 由于之前在项目中使用过easypoi,相对于原生apach ...

  6. thinkphp6 生成下载动态Excel模板,导出excel文件

    1,安装 phpexcel composer require phpoffice/phpexcel 安装成功后,vendor文件夹下会有phpoffice文件夹 2,common.php 中加入导出e ...

  7. Java 根据Excel模板 导出Excel报表

    工作中肯定会有的报表导出的功能,咱先来理下思路 先定义好模板文件,存放到一个有权限访问的目录内 根据模板路径,获取模板文件 /*** 根据模板的路径获取模板文件对象* classpath根目录下:/t ...

  8. .Net Core 读取Excel 模板 导出 Excel 文件

    var exportTemplatePath = "./Template/cxtemplate.xlsx";var newName = $"xxx进度表汇总-{Syste ...

  9. freemarker根据word模板导出动态word(Excel模板导出Excel)

    1.创建word模板 将需要替换的位置用"${}"代替,如下图: 2.将做好的模板文件保存为xml文件 3.打开xml文件,查看"${unitName}"是否在 ...

最新文章

  1. 【Python学习系列十五】pandas库DataFrame行列操作使用方法
  2. C# 操作Word书签(二)——插入图片、表格到书签;读取、替换书签
  3. 如何将IDEA文件提交至Gitee仓库
  4. 南漂DBA——除了996,还可以收获这些...
  5. Go语言基础(四)—String与其他基本数据类型的转换
  6. linux rpm 查找,Linux下 rpm 命令查询方法
  7. spring中怎么访问MySQL过程_DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量...
  8. 存储产业进入闪存时代
  9. java正则表达式 提取 host_使用正则表达式获取链接的Host
  10. mysql怎么设主键和外键_MySQL添加主键和外键
  11. java项目 ppt,Java项目报告ppt
  12. 2 电感耦合方式的射频前端
  13. python版植物大战僵尸源码_『原创』植物大战僵尸分析及Python辅助实现
  14. WEB通信之 长连接、长轮询(long polling)
  15. ps-黑白老照片快速上色
  16. linux虚拟机cents7配置静态ip
  17. kubectl认证 授权 准入控制
  18. 转盘式视觉筛选机及其图像识别系统
  19. VSCode 代码块/全文 折叠/展开 快捷键
  20. 一碗牛肉面的成本是多少钱?

热门文章

  1. OpenSea:NFT界的eBay,月交易额30亿美元后的护城河与未来
  2. ps4看直播 HTML,ps4直播教学 怎么样才能直播
  3. 【NE】北邮循序渐进学习NE
  4. 加油吧 !!!冲冲冲
  5. 查看苹果多少位系统(以及设置32或64位)
  6. Chrome浏览器怎么安装插件
  7. 实战技法 - 短线操盘 (2)
  8. 用计算机怎么弹学猫叫,抖音我们一起学猫叫计算器谱分享
  9. “原时法师”的开发流程记录和总结
  10. -XX:+PrintHeapAtGC参数使用了解