6、jeecg 笔记之 自定义excel 模板导出(一)

6、jeecg 笔记之 自定义excel 模板导出(一)

1、前言

jeecg 中已经自带 excel 的导出导出功能,其所使用的是 easypoi,尽管所导出的 excel 能满足大部分需求,

但总是有需要用到自定义 excel 导出模板,下文所用到的皆是 easypoi 提供的,为方便下次翻阅,故记之。

 

2、代码部分

2.1、controller

    @RequestMapping("/myExcel")public void myExcel(JeecgDemoExcelEntity jeecgDemoExcel, HttpServletRequest request, HttpServletResponse response)throws IOException {TemplateExportParams params = new TemplateExportParams(request.getServletContext().getRealPath("/") + "export/template/exportMyExcel.xls");params.setHeadingStartRow(3);params.setHeadingRows(2);Map<String, Object> map = new HashMap<String, Object>();map.put("date", "2014-12-25");map.put("money", 2000000.00);map.put("upperMoney", "贰佰万");map.put("company", "执笔潜行科技有限公司");map.put("bureau", "财政局");map.put("person", "JueYue");map.put("phone", "1879740****");List<TemplateExcelExportEntity> list = new ArrayList<TemplateExcelExportEntity>();for (int i = 0; i < 4; i++) {TemplateExcelExportEntity entity = new TemplateExcelExportEntity();entity.setIndex(i + 1 + "");entity.setAccountType("开源项目");entity.setProjectName("EasyPoi " + i + "");entity.setAmountApplied(i * 10000 + "");entity.setApprovedAmount((i + 1) * 10000 - 100 + "");List<BudgetAccountsEntity> budgetAccounts = Lists.newArrayList();for (int j = 0; j < 1; j++) {BudgetAccountsEntity accountsEntity = new BudgetAccountsEntity();accountsEntity.setCode("A001");accountsEntity.setName("设计");budgetAccounts.add(accountsEntity);accountsEntity = new BudgetAccountsEntity();accountsEntity.setCode("A002");accountsEntity.setName("开发");budgetAccounts.add(accountsEntity);}entity.setBudgetAccounts(budgetAccounts);PayeeEntity payeeEntity = new PayeeEntity();payeeEntity.setBankAccount("6222 0000 1234 1234");payeeEntity.setBankName("中国银行");payeeEntity.setName("小明");entity.setPayee(payeeEntity);list.add(entity);}Workbook workbook = ExcelExportUtil.exportExcel(params, TemplateExcelExportEntity.class, list, map);File savefile = new File("D:/excel/");if (!savefile.exists()) {savefile.mkdirs();}FileOutputStream fos = new FileOutputStream("D:/excel/专项支出用款申请书.xls");workbook.write(fos);fos.close();}

2.2、entity 实体类

TemplateExcelExportEntity.class

public class TemplateExcelExportEntity implements Serializable {
private static final long serialVersionUID = 1L;@Excel(name = "序号")private String index;@Excel(name = "资金性质")private String accountType;@ExcelCollection(name = "预算科目")private List<BudgetAccountsEntity> budgetAccounts;@Excel(name = "项目名称")private String projectName;@ExcelEntity(name = "收款人")private PayeeEntity payee;@Excel(name = "申请金额")private String amountApplied;@Excel(name = "核定金额")private String approvedAmount;
   get set ...
}

BudgetAccountsEntity.class(预算)

public class BudgetAccountsEntity {@Excel(name = "编码")private String code;@Excel(name = "名称")private String name;
    get set ...
 }

PayeeEntity.class(收款人)

public class PayeeEntity {@Excel(name = "全称")private String name;@Excel(name = "银行账号")private String bankAccount;@Excel(name = "开户银行")private String bankName;get set ...}

 

2.3、导出工具类 ExcelExportUtil.class

public final class ExcelExportUtil {private ExcelExportUtil() {}/*** @param entity*            表格标题属性* @param pojoClass*            Excel对象Class* @param dataSet*            Excel对象数据List*/public static Workbook exportExcel(ExportParams entity, Class<?> pojoClass, Collection<?> dataSet) {Workbook workbook;if (ExcelType.HSSF.equals(entity.getType())) {workbook = new HSSFWorkbook();} else if (dataSet.size() < 1000) {workbook = new XSSFWorkbook();} else {workbook = new SXSSFWorkbook();}new ExcelExportServer().createSheet(workbook, entity, pojoClass, dataSet);return workbook;}/*** 根据Map创建对应的Excel* * @param entity*            表格标题属性* @param pojoClass*            Excel对象Class* @param dataSet*            Excel对象数据List*/public static Workbook exportExcel(ExportParams entity, List<ExcelExportEntity> entityList, Collection<? extends Map<?, ?>> dataSet) {Workbook workbook;if (ExcelType.HSSF.equals(entity.getType())) {workbook = new HSSFWorkbook();} else if (dataSet.size() < 1000) {workbook = new XSSFWorkbook();} else {workbook = new SXSSFWorkbook();}new ExcelExportServer().createSheetForMap(workbook, entity, entityList, dataSet);return workbook;}/*** 一个excel 创建多个sheet* * @param list*            多个Map key title 对应表格Title key entity 对应表格对应实体 key data*            Collection 数据* @return*/public static Workbook exportExcel(List<Map<String, Object>> list, String type) {Workbook workbook;if (ExcelType.HSSF.equals(type)) {workbook = new HSSFWorkbook();} else {workbook = new XSSFWorkbook();}for (Map<String, Object> map : list) {ExcelExportServer server = new ExcelExportServer();server.createSheet(workbook, (ExportParams) map.get("title"), (Class<?>) map.get("entity"), (Collection<?>) map.get("data"));}return workbook;}/*** 导出文件通过模板解析,不推荐这个了,推荐全部通过模板来执行处理* * @param params*            导出参数类* @param pojoClass*            对应实体* @param dataSet*            实体集合* @param map*            模板集合* @return*/public static Workbook exportExcel(TemplateExportParams params, Class<?> pojoClass, Collection<?> dataSet, Map<String, Object> map) {return new ExcelExportOfTemplateUtil().createExcleByTemplate(params, pojoClass, dataSet, map);}/*** 导出文件通过模板解析只有模板,没有集合* * @param params*            导出参数类* @param map*            模板集合* @return*/public static Workbook exportExcel(TemplateExportParams params, Map<String, Object> map) {return new ExcelExportOfTemplateUtil().createExcleByTemplate(params, null, null, map);}}

 

2.4、excel 模板

需要用到的模板 exportMyExcel.xls

https://files.cnblogs.com/files/niceyoo/exportMyExcel.rar

 

 

2.5、调用地址

http://localhost:8080/项目名/XxxController/myExcel.do

 

2.6、效果图

 

博客地址:http://www.cnblogs.com/niceyoo

 

posted @ 2018-12-17 13:13 niceyoo 阅读(...) 评论(...) 编辑 收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Lambda 表达式使用实例,-

1、Lambda表达式理解 Lambda 表达式&#xff0c;也可称为闭包&#xff0c;它是推动 Java 8 发布的最重要新特性。 Lambda 允许把函数作为一个方法的参数&#xff08;函数作为参数传递进方法中&#xff09;。 使用Lambda 表达式可以使代码变的更加简洁紧凑。 2、Lambda表达式…

前端学习(2740):重读vue电商网站50之Element-UI 组件按需加载

通过 CDN 优化 ElementUI 的打包 虽然在开发阶段&#xff0c;我们启用了 element-ui 组件的按需加载&#xff0c;尽可能的减少了打包的体积&#xff0c;但是那些被按需加载的组件&#xff0c;还是占用了较大的文件体积。此时&#xff0c;我们可以将 element-ui 中的组件&#…

买房费用

一、买房 首付&#xff1a;355940 贷款&#xff1a;520000 维修基金&#xff1a;7800 交房&#xff1a;23719 物业&#xff1a;2280 总价&#xff1a;909739 二、装修 水电改造&#xff1a;2970 防水材料&#xff1a;300 砖&#xff1a;11500 水泥&#xff1a;798 贴砖人工&…

8、jeecg 笔记之 自定义word 模板导出(一)

8、jeecg 笔记之 自定义word 模板导出&#xff08;一&#xff09; 1、前言 jeecg 中已经自带 word 的导出导出功能&#xff0c;其所使用的也是 easypoi&#xff0c;尽管所导出的 word 能满足大部分需求&#xff0c; 但总是有需要用到自定义 word导出模板&#xff0c;下文所用到…

Android 全屏抽屉fragment,NavigationView

1、首先是右→左进入动画 、slide_left.xml <?xml version"1.0" encoding"utf-8"?> <set xmlns:android"http://schemas.android.com/apk/res/android"><translateandroid:duration"800"android:fromXDelta"20…

20180307:python接口测试时json的传参与解析区分

女生节也要好好更新^_^ 有关python与json编码请查看上篇&#xff1a;http://www.cnblogs.com/hazelrunner/p/8444744.html 下面来区分&#xff0c;用post请求方法传json的两种方法&#xff1a; 传json参数&#xff08;方法中直接转json&#xff09;# coding:utf-8 import reque…

前端学习(2741):重读vue电商网站51之首页内容定制

不同的打包环境下&#xff0c;首页内容可能会有所不同。我们可以通过插件的方式进行定制&#xff0c;插件配置如下&#xff1a; Javascript chainWebpack: config > {config.when(process.env.NODE_ENV production, config > {config.plugin(html).tap(args > {args[…

Eclipse 创建第一个 springboot 应用

Eclipse 创建第一个 springboot 应用 1、前言 一直想把笔记整理出来&#xff0c;分享一下 springboot 的搭建&#xff1b; 因为私下 idea 用的比较多&#xff0c;使用比较方便&#xff0c;但恰逢小伙伴问起 eclipse 怎么搭建的问题&#xff0c; 顾整理以记之。 2、springboot …

Can't process attribute android:fillColor=@color/gray,添加vector属性报错解决方法

Android studio添加vector属性文件报错 vector属性文件 <vector xmlns:android"http://schemas.android.com/apk/res/android"android:width"24dp"android:height"24dp"android:viewportHeight"49.94"android:viewportWidth"4…

Maven parent.relativePath

Maven parent.relativePath 默认值为../pom.xml 查找顺序&#xff1a;relativePath元素中的地址–本地仓库–远程仓库 设定一个空值将始终从仓库中获取&#xff0c;不从本地路径获取&#xff0c;如<relativePath /> 转载于:https://www.cnblogs.com/ydymz/p/8520975.html…

前端学习(2742):重读vue电商网站52之路由懒加载

当打包构建项目时&#xff0c;JavaScript 包会变得非常大&#xff0c;影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块&#xff0c;然后当路由被访问的时候才加载对应组件&#xff0c;这样就更加高效了。 具体需要 3 步&#xff1a; 安装 babel/plugin-synt…

10、jeecg 默认为空的字段值是如何被填充的?

10、jeecg 默认为空的字段值是如何被填充的? 1、前言 用过 jeecg 的小伙伴&#xff0c;在 jeecg 实体中常见下面几个字段&#xff1a; /**创建人名称*/ private java.lang.String createName; /**创建人登录名称*/ private java.lang.String createBy; /**创建日期*/ private…

Android Service与IntentService区别

相同点&#xff1a; 1、首先Service与IntentService都是Android的基本组件service 2、使用时都是一样需要创建&#xff0c;配置&#xff1b;和调用启动方式都是一样的 不同点&#xff1a; 1、IntentService是继承自Service的service 类&#xff0c;创建了自己的特有方法onH…

前端学习(2743):重读vue电商网站53之项目上线

通过 node 创建 web 服务器。开启 gzip 配置。配置 https 服务。使用 pm2 管理应用。 通过 node 创建 web 服务器 创建 node 项目&#xff0c;并安装 express&#xff0c;通过 express 快速创建 web 服务器&#xff0c;将 vue 打包生成的 dist 文件夹&#xff0c;托管为静态资…

关于五个问题的思考

关于当初&#xff1a; 博客A[1]的作者认为&#xff1a;“大学的确提供了非常丰富的能力培养机会和广阔的个人发展空间&#xff0c;但归根结底&#xff0c;学习和进步才是大学的主题&#xff0c;荒废其中任何一个都不能让大学生活过得充实而完整。”我对此有着很深的同感。大学是…

记录请求的耗时(拦截器、过滤器、aspect)

记录请求的耗时&#xff08;拦截器、过滤器、aspect&#xff09; 文章前言 记录控制器请求的耗时处理通常有三种实现方式&#xff0c;分别是&#xff1a;过滤器、拦截器、aspect&#xff1b;下文将逐一实现。 1、Filter 过滤器 1.1、方法说明 需要实现 Filter 类&#xff0c;主…

activity与service 使用Handler Messenger数据传递

service 中创建handler /*** 用于接收从客户端传递过来的数据*/ class IncomingHandler extends Handler {Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 6:Log.i("map", "thanks,Service had receiver message from client!"…

前端学习(2744):重读vue电商网站54之配置 HTTPS 服务

为什么要启用 HTTPS 服务&#xff1f; 传统的 HTTP 协议传输的数据都是明文&#xff0c;不安全采用 HTTPS 协议对传输的数据进行了加密处理&#xff0c;可以防止数据被中间人窃取&#xff0c;使用更安全 申请 SSL 证书&#xff08;https://freessl.org&#xff09; 进入 http…

A1078. 逆序对个数

问题描述 在一个数列(a1, a2, a3, …, an)中&#xff0c;对于1<i<j<n&#xff0c;如果ai>aj&#xff0c;则称(i,j)是一个逆序对。如在数列(3, 1, 5, 2)中&#xff0c;有(1,2), (1,4), (3,4)共3个逆序对。给定一个数列&#xff0c;求数列中的逆序对的个数。输入格式…

7、Flutter banner_view 轮播图的使用

7、Flutter banner_view 轮播图的使用 1、前言 实现轮播图&#xff0c;效果如下&#xff1a; 2、实现 将采用 banner_view 实现&#xff1a;资源库地址 2.1、yaml 引入依赖 在 pubspec.yaml 声明需要引用的库&#xff0c;执行命令 flutter packages get 进行拉取即可使用。 ba…