EasyPoi word导出 简易使用指南
代码的功能介绍在注释中
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导出 简易使用指南相关推荐
- EasyPoi word导出教程
(不需要copy代码,请专注于理解如何实现,我会详细解释代码!) 一.简要描述 One day,我参与的项目中,用户提了个新需求.要求:按照给定 word模板,填充数据并导出. 负责这个需求后 ...
- SpringBoot+EasyPOI word模板导出,含多张图片
这几天客户提出了新的需求,要求记录要能够导出word,并且里面包含的图片也要导出来,这里借用EasyPOI来进行操作. 参考文章:https://blog.csdn.net/qq_34752942/a ...
- EasyPoi模板导出word(简单文本、内嵌表格、循环图片)
EasyPoi模板导出word(简单文本.内嵌表格.循环图片) 先上效果图 模板在此 依赖导入 *坑:注意依赖版本 4.3.0+才支持多图片循环导出 <!-- word导出 方式:easypoi ...
- 使用EasyPoi导入导出Excel
easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言( ...
- 使用easypoi导入导出excel,SSM和SpringBoot通用代码
easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板语言(熟悉 ...
- 使用EasyPOI导入导出报表
简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员,就可以方便的写出Excel导出,Excel模板导出,Excel导入,word模板导出,通过简单的注解和模板 ...
- poi word插入图片_豌豆BI工具看板Word导出技术详解
Word是最常见的文档编辑工具,当数据分析完成之后,将分析数据的图表在Word中展现,进行汇报或者存档是非常具有现实意义.在此背景之下,全新的Word导出,在豌豆BI 2.1.2 中与大家见面了. 本 ...
- vue3.0 word导出
vue3.0 word导出 安装 引入 添加点击事件 js部分 安装 npm install --save file-saver 用于保存文件 引入 import FileSaver from 'fi ...
- 利用freemarker模板引擎进行word导出
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP.它不仅可以用作表现层的实现 ...
最新文章
- android theme material,Android Studio 换主题(Material Theme..)
- Linux/Unix中的重定向简单实例
- Selenium 2.0的由来及设计架构(二)
- 西部数码虚拟主机服务器配置,西部数码虚拟主机设置首页功能介绍
- 分享一个Vant Weapp小程序UI组件库
- wxWidgets:编写一个应用程序
- 通过异常捕获判断字符串是不是数字格式
- ASP.NET Core 中做集成测试的三种方案
- 【填坑】博客搬家造成的博客重复问题
- 内联脚本被视为是有害的_数据类被认为有害
- matchers依赖_Hamcrest Matchers,Guava谓词和Builder设计模式
- rabbitmq-web-stomp 优化过程
- 遗传算法matlab_当结构设计遇到遗传算法应用ANSYS和MATLAB联合仿真优化设计探索(前传)...
- html5广告条滚动特效代码,js实现随屏幕滚动的带缓冲效果的右下角广告代码
- 实验三 大数据可视化工具—ECharts
- 2020 DEMO CHINA首次进入成都,解码智慧经济新时代
- 魅族 系统更新服务器,Flyme
- js:nodejs简单的Http服务器搭建
- Java实现短链接URL生成
- 华为手机怎么使用读卡器_华为手机怎么绑定门禁卡
热门文章
- mysql适合储存高清电影的数据类型_下列数据类型中适合存储PDF文档的是( ) (5.0分)_学小易找答案...
- fpu测试_【小加评测】性价比散热器?3700X吃鸡仅50度?利民TS120风灵 散热器实战测试分享...
- 直齿外啮合圆柱齿轮的跨棒距数学原理
- 22万个木箱!TWaver 3D极限压榨
- python计算机二级证书含金量到底高不高?
- 2021年电工(中级)试题及解析及电工(中级)操作证考试
- 基于jsp+mysql+ssm的办公用品领用管理系统
- 晶体(crystal)和晶振(oscillator)
- labview呀,可是真有意思
- MCE | 小鼠实验