博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springSSM 使用poi导出excel(一)
阅读量:5764 次
发布时间:2019-06-18

本文共 4903 字,大约阅读时间需要 16 分钟。

hot3.png

使用的核心知识为java的反射机制,注解的使用,下面是过程代码:

1、js部分

function exportExcelCom(actionurl){

var $form = $("
"); //定义一个form表单$form.attr('style', 'display:none'); //在form表单中添加查询参数$form.attr('target', '');$form.attr('method', 'post');$form.attr('action', actionurl);$('body').append($form); //将表单放置在web中 $form.submit();

}

2、spring Controller

@RequestMapping(value = "/exportExcel")

public void exportExcel(HttpServletRequest request,

HttpServletResponse response) throws SecurityException,

IllegalArgumentException, ClassNotFoundException, NoSuchMethodException, Exception{

System.out.println("执行导出***");

byte[] fileNameByte = ("职业病基础知识.xls").getBytes("GBK");        String filename = new String(fileNameByte, "ISO8859-1");     List
list = new ArrayList
(); /*ZywsptGfxwjb zywsptGfxwjb = new ZywsptGfxwjb(); zywsptGfxwjb.setMc("名称1"); zywsptGfxwjb.setGjz("关键系"); list.add(zywsptGfxwjb);*/ list = gfxwjService.selectObjExist(); byte[] bytes = excelService.export(list); response.setContentType("application/x-msdownload"); response.setContentLength(bytes.length); response.setHeader("Content-Disposition", "attachment;filename=" + filename); response.getOutputStream().write(bytes);}

3、通用类方法

public static byte[] export(String sheet1, String title, Class<?> clazz,List<?> list) throws IOException, ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, Exception{ ByteArrayOutputStream out = new ByteArrayOutputStream();

// 第一步,创建一个webbook,对应一个Excel文件        HSSFWorkbook wb = new HSSFWorkbook();    // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet        HSSFSheet sheet = wb.createSheet(sheet1);     // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short      HSSFRow row = sheet.createRow((int) 0);    // 第四步,创建单元格,并设置值表头 设置表头居中        HSSFCellStyle style = wb.createCellStyle();    style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式    //设置表头        List
excelHead = getExcelHead(clazz); String clazzName = clazz.getName(); Class _class = Class.forName(clazzName); HSSFCell cell = null; // excel头 for (int i = 0; i < excelHead.size(); i++) { ExportFiledsBean exportFiledsBean = excelHead.get(i); cell = row.createCell(i); cell.setCellValue(exportFiledsBean.getName()); cell.setCellStyle(style); } for (int i = 0;i
getExcelHead(Class
clazz){ return AunotationUtil.getExportFileds(clazz);}private void insertCell(HSSFRow row,int i,Object object){ if(object==null){ row.createCell(i).setCellValue(""); }else{ row.createCell(i).setCellValue(object.toString()); } }

4、注解方法解析类

public class AunotationUtil {

/** * 获取注解的方法 * [@param](https://my.oschina.net/u/2303379) clazz * [@return](https://my.oschina.net/u/556800) */public static List
getExportFileds(Class
clazz){ List
exportFiledsBeans = new ArrayList
(); String clazzName = clazz.getName(); //System.out.println("class的name:"+clazzName); Field[] fileds = clazz.getDeclaredFields(); for(Field field :fileds) { if(field.isAnnotationPresent(ExportField.class)) { ExportField exportField=(ExportField)field.getAnnotation(ExportField.class); String fieldName = field.getName(); String name = exportField.name(); String setFuncName = exportField.setFuncName(); String getFuncName = exportField.getFuncName(); boolean bl = exportField.isExport(); ExportFiledsBean exportFiledsBean = new ExportFiledsBean(); if(bl==true) { exportFiledsBean.setFiledName(fieldName); exportFiledsBean.setName(name); exportFiledsBean.setSetFuncName(setFuncName); exportFiledsBean.setGetFuncName(getFuncName); //System.out.println(fieldName+":"+name+":"+setFuncName+":"+getFuncName); exportFiledsBeans.add(exportFiledsBean); } } } return exportFiledsBeans;}public static void main(String[] arg){ AunotationUtil.getExportFileds(ZywsptGfxwjb.class);}

}

5、注解

@Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ExportField {

public String name() default "filedName";public String setFuncName() default "setField";    public String getFuncName() default "getField";    public boolean isExport() default false;

}

6、pojo类

public class ExportFiledsBean {

private String filedName;private String name;private String setFuncName;private String getFuncName;

}

public class ZywsptGfxwjb {

@ExportField(name="编码",setFuncName="setId",getFuncName="getId",isExport=false)private BigDecimal id;@ExportField(name="名称",setFuncName="setMc",getFuncName="getMc",isExport=true)private String mc;@ExportField(name="关键字",setFuncName="setGjz",getFuncName="getGjz",isExport=true)private String gjz;

}

转载于:https://my.oschina.net/maojindaoGG/blog/757401

你可能感兴趣的文章
Java程序员的日常 —— 响应式导航Demo
查看>>
objective-c内存管理基础
查看>>
sap关于价值串的说法(转载)
查看>>
Migration to S/4HANA
查看>>
sed 对目录进行操作
查看>>
什么是代码
查看>>
移动端开发单位——rem,动态使用
查看>>
系列文章目录
查看>>
手把手教你如何提高神经网络的性能
查看>>
前端布局原理涉及到的相关概念总结
查看>>
递归调用 VS 循环调用
查看>>
使用sstream读取字符串中的数字(c++)
查看>>
树莓派下实现ngrok自启动
查看>>
javascript静态类型检测工具—Flow
查看>>
MachineLearning-Sklearn——环境搭建
查看>>
node学习之路(二)—— Node.js 连接 MongoDB
查看>>
Goroutine是如何工作的?
查看>>
《深入理解java虚拟机》学习笔记系列——垃圾收集器&内存分配策略
查看>>
TriggerMesh开源用于多云环境的Knative Event Sources
查看>>
GitLab联合DigitalOcean为开源社区提供GitLab CI免费托管
查看>>