Javaweb开发中数据的导入导出很常见,每次我们都需要写很多代码,所以我就在想能不能写一些通用的方法,之前已经在网上
整理过一些通用的方法,最近在网上看到一位牛人封装的更加简介,自己拿过来整理了一下。

配置注解

  • 之前我们了解了Java注解的使用,现在我们正是通过注解的方式来简化javaweb中繁琐的Excel上传和下载两个功能。由于时间有限今天先实现了Excel的下载(Excel 导出)。

  • 上面的就是我们的注解类的简化图。参数的意思分别是指定表头的名字+表头所占列宽度+该列是否明文显示+加密显示的方式+特殊文本的格式

数据实体类

  • 有了上面的注解我们的实体类非常的简单,只是在我们平常建的Javabean的属性字段上加上我们刚才的注解就行了。

  • 其中ExportConfig注解中的属性值我们可以不设置,不设置就是默认的。这里设置完成后就开始写导出了。

Excel导出

  • 现在该如何获取我们的注解呢,之前的文章已经介绍了。我们得首先获得我们的Javabean的字段。
for (Field field : _class.getDeclaredFields())
  • 可能会出现我们的Javabean的数据并不是完全的查出来了。所以这里我们得先看看这个字段到底有没有值。
property = BeanUtils.getProperty(data.get(0), field.getName());
  • 在有值得前提下我们在获取字段的注解。
ExportConfig config = field.getAnnotation(ExportConfig.class);
  • 最后我们开始讲注解的信息存在到信息类上ExportItem.java
items.add(new ExportItem.$Build()
.setField(field.getName())
.setDisplay(
"field".equals(config.value()) ? field
.getName() : config.value())
.setWidth(config.width())
.setIsExport(config.isExport())
.setContent(config.blankContent())
.setFieldTypeName(field.getClass().getSimpleName())
.setFormat(config.format())
.create());
  • ExportItem 类也很简单。里面拷贝了自身的一个类实现了链式操作。这里没什么讲解的。到这里我们的表头显示设置已经完成了。下面自然就是遍历list集合数据了。当然遍历之前先设置表头样式。
ExportItem exportItem = items.get(index);
// 首先创建该行指定列的单元格
Cell cell = headRow.createCell(index);
sheet.setColumnWidth(index, (short) (exportItem.getWidth() * 35.7));
cell.setCellValue(exportItem.getDisplay());
CellStyle style = handler.getHeadCellStyle(wb);
if (style != null)
{
cell.setCellStyle(style);
}
  • 在设置表身的时候我们得先去注解信息类中拿到该列显示的风格(是否是明文)。
if (exportItem.getIsExport())
  • 在设置了内容之后我们还要根据注解的单元格格式进行样式的设置
setStyleByType(wb,exportItem.getFormat());

Excel输出

 fileName += getExcelSuffix(type);
_response.setContentType(getContentType(type));
_response.setHeader(
"Content-disposition",
"attachment; filename="
+ new String(fileName.getBytes("gbk"), "iso8859-1")); if (out == null)
{
out = _response.getOutputStream();
}
wb.write(out);
out.flush();
out.close();

所需jar

log4j-1.2.17.jar 日志jar包
servlet-api.jar 正常在web项目中都不需要引入该jar包
poi-3.9.jar 操作表格jar包
pi-ooxml-3.12.jar XSSFWorkbook 处理2007版本及以上的excel

调用代码

List<ExcelUser> list = adminManageServiceI.getUsers(ConstantUtil.ADMIN_ID);
// 生成Excel并使用浏览器下载
ExcelTool.$Brower(ExcelUser.class, response).toExcel(list, "用户信息");

效果


源码正在更新,导入导出全部完成在上传源码。

最新文章

  1. 从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念
  2. jQuery 2.0.3 源码分析Sizzle引擎 - 编译函数(大篇幅)
  3. Bootstrap之样式风格与下拉菜单
  4. CSS3——transform学习
  5. 一个简单的游戏开发框架(五.对象Object)
  6. sigaction和sigqueue
  7. Sql 2012 远程数据库连接
  8. UITabBarController的一些基础设置
  9. [Java] 03 String获取文件后缀名,判断文件是否合法
  10. [PoC]某B2B网站的一个反射型XSS漏洞
  11. [转] react-native 之布局篇
  12. Yii2框架---常用代码
  13. Python之scrapy实例1
  14. mvn mybatis-generator:generate postgresql
  15. Android 官方DEMO BasicNetworking
  16. Web API 2 使用Entity Framework Part 1.
  17. 【AGC013C】Ants on a Circle 弹性碰撞
  18. fjwc2019 D3T1 签到题 (贪心)
  19. error LNK2019: 无法解析的外部符号 __vsnwprintf,该符号在函数 &quot;long __stdcall StringVPrintfWorkerW
  20. 【安装】Microsoft SQL Server的安装

热门文章

  1. scrapy基础知识之 关于爬虫部分一些建议:
  2. 从无到有构建vue实战项目(四)
  3. 环形缓存RingBuf的几种实现方式(数组,链表),及Disruptor的分析
  4. python基础认识(一)
  5. 对于Typora(markdown)的基本使用
  6. spark 源码分析之十五 -- Spark内存管理剖析
  7. [01] HEVD 双机调试环境搭建
  8. 《ElasticSearch6.x实战教程》之简单搜索、Java客户端(上)
  9. VUE v-for循环中每个item节点动态绑定不同函数方法
  10. JAVA 基于TCP协议的一对一,一对多文件传输实现