logo头像

学如逆水行舟,不进则退!!!

文章目录

通过注解实现通用导出Excel

本文于568天之前发表,文中内容可能已经过时。

Javaweb开发中数据的导入导出很常见

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, "用户信息");

效果

这里写图片描述


源码正在更新,导入导出全部完成在上传源码。
上一篇
坚持原创技术分享,您的支持将鼓励我继续创作!