1 import java.lang.reflect.Field;
 2 import java.lang.reflect.Method;
 3 import java.util.Iterator;
 4 import java.util.List;
 5
 6 import org.apache.poi.hssf.usermodel.HSSFCell;
 7 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
 8 import org.apache.poi.hssf.usermodel.HSSFRow;
 9 import org.apache.poi.hssf.usermodel.HSSFSheet;
10 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
11
12 /**
13  * Excel通用工具类
14  * @param sheetName 表格名字
15  * @param headers 表头
16  * @param columns 列(对象属性名)对应表头
17  * @param lists 数据源
18  */
19 public class ExcelUtil<T> {
20      public HSSFWorkbook export(String sheetName, String[] headers, String[] columns, List<T> lists) throws Exception {
21             HSSFWorkbook wb = new HSSFWorkbook();
22             HSSFSheet sheet = wb.createSheet(sheetName);
23             sheet.setDefaultColumnWidth(11);
24             HSSFCellStyle style = wb.createCellStyle();
25             HSSFRow row = sheet.createRow(0);
26             style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
27             style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
28             for (int i = 0; i < headers.length; i++) {
29                 HSSFCell headerCell = row.createCell(i);
30                 headerCell.setCellValue(headers[i]);
31                 headerCell.setCellStyle(style);
32             }
33             Iterator<T> it = lists.iterator();
34             int rowIndex = 0;
35             while (it.hasNext()) {
36                 rowIndex++;
37                 row = sheet.createRow(rowIndex);
38                 T t = it.next();
39                 Field[] fields = t.getClass().getDeclaredFields();
40                 for (int i = 0; i < fields.length; i++) {
41                     Field field = fields[i];
42                     String fieldName = field.getName();
43                     for (int j = 0; j < columns.length; j++) {
44                         if (fieldName.equals(columns[j])) {
45                         String getMethodName ="get"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
46                         Class<? extends Object> cls = t.getClass();
47                         Method getMethod = cls.getMethod(getMethodName, new Class[] {});
48                         Object val = getMethod.invoke(t, new Object[] {});
49                         String textVal = null;
50                         if (null != val) {
51                             textVal = val.toString();
52                         } else {
53                             textVal = null;
54                         }
55                         HSSFCell hssfCell=row.createCell(j);
56                         hssfCell.setCellValue(textVal);
57                         hssfCell.setCellStyle(style);
58                     }
59                 }
60             }
61         }
62         return wb;
63      }
64 }
 
 1 Server层
 2
 3     /**
 4      *  导出数据
 5      * @throws Exception
 6      */
 7     public HSSFWorkbook  outputExcel() throws Exception {
 8         List<Distribution> lists = mapper.selectByExample(new DistributionExample());
 9         String sheetName = "债券分销表";
10         String[] headers = {"指令日期","组合代码","组合名字","业务类型","缴款金额","缴款日期",
11                              "O32状态","是否加急","出款状态","主承状态","交收状态"};  //表头
12         String[] columns = {"instructionDate","compositeCode","combinationName","interestType",
13                              "paymentAmount","paymentDate","o32Status","urgentStatus","cashFlowStatus",
14                              "underwritingStatus","settlementState"};      //bean 属性名 需对应表头
15         ExcelUtil<Distribution> excelUtil = new ExcelUtil<Distribution>();
16         HSSFWorkbook wb=excelUtil.export(sheetName, headers, columns, lists);
17         //FileOutputStream fos= new FileOutputStream("E://dis.xls");
18         //wb.write(fos);
19         return wb;
20     }
21     
 1 @RequestMapping(produces="application/vnd.ms-excel;charset=UTF-8",value="qwangxiao.com /downloadExcel",method = RequestMethod.GET)
 2     public void downloadExcel(HttpServletResponse response){
 3         response.addHeader("Content-Disposition","attachment; filename=\"债券分销列表.xls\"" );
 4         HSSFWorkbook wk=null;
 5         OutputStream oStream=null;
 6         try {
 7             oStream = response.getOutputStream();
 8             wk = distributionService.outputExcel();
 9             wk.write(oStream);
10         }catch (Exception e) {
11             e.printStackTrace();
12             logger.info("导出Excel表格出现异常"+e);
13         }finally {
14             if(oStream!=null){
15                 try {
16                     oStream.close();
17                 } catch (IOException e) {
18                     e.printStackTrace();
19                 }
20             }
21         }
22     }

SSM poi通过模板 反射导出excel的更多相关文章

  1. vue Excel导入,下载Excel模板,导出Excel

    vue  Excel导入,下载Excel模板,导出Excel vue  Excel导入,下载Excel模板 <template> <div style="display: ...

  2. 使用POI插件,提取导出excel的工具类

    在网站的不同的模块都需要使用到导入导出excel的功能,我们就需要写一个通用的工具类ExcelUtil. 我的思路:首先,导入和导出的Excel的文件格式固定:主标题,二级标题,数据行(姑且就这么叫) ...

  3. 反射导出 Excel

    /// <summary> /// List 数据导出Excel /// </summary> /// <param name="list">数 ...

  4. 【poi】解决java导出excel 海量数据内存溢出问题

    转自百度经验:http://jingyan.baidu.com/article/4853e1e5202c331909f72627.html 那里排版忒恶心,转来这里. 由于项目中有导出海量数据的需求, ...

  5. poi操作oracle数据库导出excel文件2

    package com.test; import java.io.File;  import java.io.FileInputStream;  import java.io.FileNotFound ...

  6. 尝试做一个.NET模板填充导出Excel工具

    园友好,最近晚辈延续上篇后尝试进阶做成Excel模板填充数据生成工具 MiniExcel Template. 主要特点 同样以Stream流.延迟查询避免全部数据载入内存情况,做到1GB内存降低到只需 ...

  7. poi操作oracle数据库导出excel文件

    HSSFWorkbook workBook = new HSSFWorkbook();// 创建 一个excel文档对象 HSSFSheet sheet = workBook.createSheet( ...

  8. 反射导出excel案例

    1.代码案例: protected void btnExportExcel_Click(object sender, EventArgs e) { SetSearchValue(); Dictiona ...

  9. 根据模板导出Excel报表并生成多个Sheet页

    因为最近用报表导出比较多,所有就提成了一个工具类,本工具类使用的场景为  根据提供的模板来导出Excel报表 并且可根据提供的模板Sheet页进行复制 从而实现多个Sheet页的需求, 使用本工具类时 ...

随机推荐

  1. [Oracle]包含了MVIEW的表领域,在进行导出,表领域改名,再导入后,MVIEW会消失不见。

    包含了MVIEW的表领域,在进行导出,表领域改名,再导入后,MVIEW会消失不见. 测试环境12.1.0.2 =================步骤1:数据的准备 [oracle@db12102 ad ...

  2. 【php增删改查实例】第十三节 - EasyUI列格式化

    因为easyUI的datagrid组件是横着一格一格加载数据的,一行加载好了之后才会去加载下一行.所谓的列格式化,就是在加载某一列的所有单元格时,对即将加载到这些单元格的数据进行二次包装. 比如,我们 ...

  3. 使用while和read命令读取文件内容

    转:使用while和read命令读取文件内容 1.准备数据文件 $cat a.txt 200:2 300:3 400:4 500:5 2.用while循环从文件中读取数据 #!/bin/ksh whi ...

  4. Python 学习 第一篇:数据类型(数字,集合,布尔类型,操作符)

    Python语言最常用的对象是变量和常量,常量的值是字面意思,其值是不可变的,变量的值是可变的,例如,123,"上海"是常量,而a=1,a=2,其中a是变量名.内置的核心数据类型有 ...

  5. Ionic 入门与实战之第一章:Ionic 介绍与相关学习资源

    原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第一章,主要对 Ionic 的概念.发展历程.适配的移动平台等知识进行了介绍,并分享了 Ionic 相关的学习资源. 原文发表于我的技 ...

  6. Python自动化运维工具-Fabric部署及使用总结

    使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...

  7. linux内核分析第四次实验

    实验步骤: 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用.本次实验中我使用第20号系统调用getpid()函数,用于取得进程识别码. C代码(getpid.c): #include ...

  8. Liinux 学习心得

    Linux 内核学习心得 姬梦馨 原创作品 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 反汇编一个简 ...

  9. github链接与心得体会

    https://github.com/wangyuefang/test 第一次使用github,我觉得github是一个非常人性化的软件,使用起来很方便.而且可以把GitHub作为免费的远程仓库,如果 ...

  10. Xcode自动选择证书

    从xcode3时代习惯了手动选择证书,即 Provisioning Profile和 Code Signing Identify. 而随着团队扩大,应用量增多,需要管理的证书也越来越多,每次从长长的l ...