代码的功能介绍在注释中

0、整理思路

(1)前端按钮调用后端控制类
(2)前端:传递参数,接受返回的文件并下载到本地
(3)后端:接受传递过来的参数,查找出对应的实体类,通过easypoi提供的模板和控制类,写入文件
(4)模板:根据要写入的值确定word模板,并将其放入启动类所在包的resource下
(5)实体:实体类添加@Escel相关注释

1、安装依赖

     <!-- 集成 easypoi --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.3.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>3.3.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>3.3.0</version></dependency>

2、确定word模板

{{area}}   双括号内放变量或常量
{{fd:(Time;yyyy-MM-dd)}}   fd:(obj;yyyy-MM-dd)格式化时间格式
{{fe:List t}}   fe:obj  t  t为别名

放一个自己的例子


这里因为放的是实体类,所以是t.name,同一行的数据只需要两对{}

3、修改实体类

//牵扯到了三个实体类,所以都要注释@Data
@Accessors(chain = true)
@TableName(value = "report_dingtalk_data" , autoResultMap = true)
public class DingTalkDateEntity {@TableIdprivate Long id;/*** 大区*/@Excel(name = "大区", width = 15)   //需要导出的数据需添加@Ecxcel注解private String area;/*** 大区负责人名称*/@Excel(name = "大区负责人名称", width = 15)private String marketingPersonnel;/*** 市/县 (一级经销商信息)*/@Excel(name = "市、县", width = 15)private String city;/*** 姓名 (一级经销商信息)*/@Excel(name = "姓名", width = 15)private String userName;/*** 最后执行时间*/@Excel(name =" 最后执行时间", width = 15, format = "yyyy-MM-dd")//确定表示时间的格式@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")private Date applicationTime;/*** 数据*/@ExcelCollection(name = "数据", orderNum = "12")@TableField(typeHandler = DecorationFormJsonTypeHandler.class)private DecorationForm body;
}
@Data
@Accessors(chain = true)
@ApiModel("形象店装修申请表")
public class DecorationForm {@Excel(name = "大区", width = 15)@ApiModelProperty("大区")private String area;@Excel(name =" 申请时间", width = 15, format = "yyyy-MM-dd")@ApiModelProperty("申请时间")@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")private Date applicationTime;@Excel(name = "消费人员", width = 15)@ApiModelProperty("营销人员")private String marketingPersonnel;@Excel(name = "市/县 (一级经销商信息)", width = 15)@ApiModelProperty("市/县 (一级经销商信息)")private String city;@Excel(name = "姓名 (一级经销商信息)", width = 15)@ApiModelProperty("姓名 (一级经销商信息)")private String userName;@ExcelCollection(name = "二级渠道经销商基础信息", orderNum = "7")@ApiModelProperty("二级渠道经销商基础信息")private List<DealerBaseInfo> dealerBaseInfos;}
@Data
@Accessors(chain = true)
@ApiModel("二级渠道经销商基础信息")
public class DealerBaseInfo {@Excel(name = "乡镇名称", width = 15)@ApiModelProperty("乡镇名称")private String townshipName;@Excel(name = "姓名", width = 15)@ApiModelProperty("姓名")private String name;@Excel(name = "联系方式", width = 15)@ApiModelProperty("联系方式")private String contactDetails;@Excel(name = "经营品牌", width = 15)@ApiModelProperty("经营品牌")private String businessContent;@Excel(name = "年销量", width = 15)@ApiModelProperty("年销量")private String annualSales;@Excel(name = "店面间数", width = 15)@ApiModelProperty("店面间数")private String storeCount;@Excel(name = "装修尺寸", width = 15)@ApiModelProperty("装修尺寸")private String decorationSize;@Excel(name="图片附件",width=25,type=2)@ApiModelProperty("图片附件")private List<String> annexPic;}

4、编写控制类

@RequestMapping(value = "/exportXls")public void exportXls(String id, HttpServletResponse response) throws Exception {Map<String, Object> map = new HashMap<String, Object>();  //map映射,来映射模板中的名与参数DingTalkDateEntity dingTalkDate = dingTalkDateService.getById(id);  //根据id查询出实体类map.put("area", dingTalkDate.getArea());                    //将第一个实体类的参数打印map.put("marketingPersonnel", dingTalkDate.getMarketingPersonnel());map.put("ApplicationTime", dingTalkDate.getApplicationTime());DecorationForm body = dingTalkDate.getBody();map.put("city", body.getCity());   //获得第二个实体类map.put("name",body.getUserName());List<DealerBaseInfo>  dealerBaseInfos = body.getDealerBaseInfos();  //第三个实体类的List信息List<Map<String,Object>>  infoList = new ArrayList<>();for(int i=0; i<dealerBaseInfos.size(); i++){ //遍历ListDealerBaseInfo info =  new DealerBaseInfo();info = dealerBaseInfos.get(i);Map<String, Object> stringObjectMap = BeanUtil.beanToMap(info);stringObjectMap.put("index",i+1);   //添加序号标识infoList.add(stringObjectMap);}map.put("infoList",infoList);             ResourceLoader resourceLoader = new DefaultResourceLoader();  //Spring对物理资源的访问方式抽象成Resource,我们可以通过Spring提供的接口来访问磁盘文件等数据。InputStream inputStream = resourceLoader.getResource("classpath:word/test123.docx").getInputStream();//字节输入流,用来将文件中的数据读取到java程序中XWPFDocument document = new MyXWPFDocument(inputStream);  //直接new一个空的XWPFDocument,之后再往这个XWPFDocument里面填充内容,然后再把它写入到对应的输出流中。selfCreateAnnexPic(document,dealerBaseInfos);    // 添加附件函数WordExportUtil.exportWord07(document, map);   //word导出工具类,将输入流和映射关系写入document.write(response.getOutputStream());  //写入文件}private void selfCreateAnnexPic(XWPFDocument document, List<DealerBaseInfo> imgList) {XWPFParagraph paragraph = document.createParagraph();paragraph.setPageBreak(true);for (DealerBaseInfo imgInfo: imgList) {XWPFRun run = paragraph.createRun();run.setBold(true);run.setText("附件:" + imgInfo.getTownshipName());run.setFontSize(15);run.addBreak();for (String s : imgInfo.getAnnexPic()) {ImageEntity image = new ImageEntity();image.setHeight(250);image.setWidth(200);image.setUrl(s);image.setType(ImageEntity.URL);ExcelMapParse.addAnImage(image,run);run.addTab();}run.addBreak();}}

5、前端代码

 import { getAction, downloadFile } from '@/api/manage'<a href="javascript:;" @click="exportToWord(record)">导出</a>exportToWord(record) {downloadFile("/ding/exportXls","下载文件.docx",{id: record.id}).then(res => {})},

6、效果展示

7、多sheet导出

 /*** 导出多sheet表方法* @param excelClassList,放名字,数据,类class* @param response*/public static void downloadExcel(String excelName,List<ExcelClass> excelClassList, HttpServletResponse response){try {//构建map集合List<Map<String,Object>> mapList = new ArrayList<Map<String,Object>>();for (ExcelClass excelClass:excelClassList){Map<String,Object> map = new HashMap<String,Object>();map.put("title",new ExportParams(excelClass.getName(),excelClass.getName(), ExcelType.XSSF));map.put("entity",excelClass.getAClass());map.put("data",excelClass.getData());mapList.add(map);}//调用ExcelExportUtil.exportExcel方法生成workbookWorkbook wb = ExcelExportUtil.exportExcel(mapList, ExcelType.XSSF);String fileId = String.valueOf(System.currentTimeMillis());String fileName = excelName+ File.separator + fileId + ".xls";response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));wb.write(response.getOutputStream());}catch (Exception e){e.printStackTrace();}}

用法:

  /*** 导出出租单Excel* @param response* @param sqlLeaseBills* @param commonQuery*/@Overridepublic void downloadBills(HttpServletResponse response, LeaseBills sqlLeaseBills, CommonQuery commonQuery){//构造材料设备表查询器QueryWrapper<LeaseBills> autoQueryWrapper = QueryGenerator.initQueryWrapper(sqlLeaseBills, commonQuery);autoQueryWrapper.orderByDesc("create_time");List<LeaseBills> leaseBills = leaseBillsMapper.getBills(autoQueryWrapper);List<LeaseBillsDetails> leaseBillsDetails = leaseBillsDetailsService.list(Wrappers.<LeaseBillsDetails>lambdaQuery().in(LeaseBillsDetails::getLeaseNo,leaseBills.stream().map(LeaseBills::getLeaseNo).collect(Collectors.toList())));List<LeaseBillsOtherCost> leaseBillsOtherCosts = leaseBillsOtherCostService.list(Wrappers.<LeaseBillsOtherCost>lambdaQuery().in(LeaseBillsOtherCost::getLeaseNo,leaseBills.stream().map(LeaseBills::getLeaseNo).collect(Collectors.toList())));List<ExcelClass> excelClassList = new LinkedList<>();excelClassList.add(new ExcelClass("出租单主表",leaseBills,LeaseBills.class));excelClassList.add(new ExcelClass("出租单明细",leaseBillsDetails, LeaseBillsDetails.class));excelClassList.add(new ExcelClass("其他费用",leaseBillsOtherCosts, LeaseBillsOtherCost.class));//输出表格ExcelUtils.downloadExcel("出租单",excelClassList,response);}

EasyPoi word导出 简易使用指南相关推荐

  1. EasyPoi word导出教程

    (不需要copy代码,请专注于理解如何实现,我会详细解释代码!) 一.简要描述   One day,我参与的项目中,用户提了个新需求.要求:按照给定 word模板,填充数据并导出.   负责这个需求后 ...

  2. SpringBoot+EasyPOI word模板导出,含多张图片

    这几天客户提出了新的需求,要求记录要能够导出word,并且里面包含的图片也要导出来,这里借用EasyPOI来进行操作. 参考文章:https://blog.csdn.net/qq_34752942/a ...

  3. EasyPoi模板导出word(简单文本、内嵌表格、循环图片)

    EasyPoi模板导出word(简单文本.内嵌表格.循环图片) 先上效果图 模板在此 依赖导入 *坑:注意依赖版本 4.3.0+才支持多图片循环导出 <!-- word导出 方式:easypoi ...

  4. 使用EasyPoi导入导出Excel

    easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言( ...

  5. 使用easypoi导入导出excel,SSM和SpringBoot通用代码

    easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板语言(熟悉 ...

  6. 使用EasyPOI导入导出报表

    简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员,就可以方便的写出Excel导出,Excel模板导出,Excel导入,word模板导出,通过简单的注解和模板 ...

  7. poi word插入图片_豌豆BI工具看板Word导出技术详解

    Word是最常见的文档编辑工具,当数据分析完成之后,将分析数据的图表在Word中展现,进行汇报或者存档是非常具有现实意义.在此背景之下,全新的Word导出,在豌豆BI 2.1.2 中与大家见面了. 本 ...

  8. vue3.0 word导出

    vue3.0 word导出 安装 引入 添加点击事件 js部分 安装 npm install --save file-saver 用于保存文件 引入 import FileSaver from 'fi ...

  9. 利用freemarker模板引擎进行word导出

    FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP.它不仅可以用作表现层的实现 ...

最新文章

  1. android theme material,Android Studio 换主题(Material Theme..)
  2. Linux/Unix中的重定向简单实例
  3. Selenium 2.0的由来及设计架构(二)
  4. 西部数码虚拟主机服务器配置,西部数码虚拟主机设置首页功能介绍
  5. 分享一个Vant Weapp小程序UI组件库
  6. wxWidgets:编写一个应用程序
  7. 通过异常捕获判断字符串是不是数字格式
  8. ASP.NET Core 中做集成测试的三种方案
  9. 【填坑】博客搬家造成的博客重复问题
  10. 内联脚本被视为是有害的_数据类被认为有害
  11. matchers依赖_Hamcrest Matchers,Guava谓词和Builder设计模式
  12. rabbitmq-web-stomp 优化过程
  13. 遗传算法matlab_当结构设计遇到遗传算法应用ANSYS和MATLAB联合仿真优化设计探索(前传)...
  14. html5广告条滚动特效代码,js实现随屏幕滚动的带缓冲效果的右下角广告代码
  15. 实验三 大数据可视化工具—ECharts
  16. 2020 DEMO CHINA首次进入成都,解码智慧经济新时代
  17. 魅族 系统更新服务器,Flyme
  18. js:nodejs简单的Http服务器搭建
  19. Java实现短链接URL生成
  20. 华为手机怎么使用读卡器_华为手机怎么绑定门禁卡

热门文章

  1. mysql适合储存高清电影的数据类型_下列数据类型中适合存储PDF文档的是( ) (5.0分)_学小易找答案...
  2. fpu测试_【小加评测】性价比散热器?3700X吃鸡仅50度?利民TS120风灵 散热器实战测试分享...
  3. 直齿外啮合圆柱齿轮的跨棒距数学原理
  4. 22万个木箱!TWaver 3D极限压榨
  5. python计算机二级证书含金量到底高不高?
  6. 2021年电工(中级)试题及解析及电工(中级)操作证考试
  7. 基于jsp+mysql+ssm的办公用品领用管理系统
  8. 晶体(crystal)和晶振(oscillator)
  9. labview呀,可是真有意思
  10. MCE | 小鼠实验