使用反射将model数据下载到Excel中

package test.upload.utils;

import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Workbook; /**
 * 生成EXCEL的工具类
 * 
 * @author duandingyang
 * 
 */
public class ExcelUtils {     /**
     * 生成EXCEL的通用方法
     * 
     * @param filePath 生成EXCEL的地址
     * @param clazz 绑定数据的类型
     * @param list 数据列表
     * @param map EXCEL表头信息
     * @throws Exception
     */
    public static HSSFWorkbook generateExcel(Class<?> clazz, List<?> list,
            Map<String, ExcelTitle> map) throws Exception {         HSSFWorkbook wb = new HSSFWorkbook();
        CreationHelper helper = wb.getCreationHelper();
        HSSFSheet sheet = wb.createSheet("sheet1");
        HSSFRow row = sheet.createRow(0);
        CellStyle cellStyle = ExcelUtils.createStyleCell(wb);
        cellStyle.setFont(ExcelUtils.createFonts(wb));
        int i = 0;
        for (String attr : map.keySet()) {
            sheet.setColumnWidth(i, 5000);
            ExcelTitle excelTitle = map.get(attr);
            int order = excelTitle.getOrder();
            String title = excelTitle.getTitle();
            HSSFCell cell = row.createCell(order);
            cellStyle = ExcelUtils.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER,
                    CellStyle.VERTICAL_CENTER);
            cellStyle.setWrapText(true);    
            cell.setCellStyle(cellStyle);
            cell.setCellValue(title);
            i++;
        }
        int rowNum = 1;
        if (list != null) {
            for (Object obj : list) {
                row = sheet.createRow(rowNum);
                for (String attr : map.keySet()) {
                    ExcelTitle excelTitle = map.get(attr);
                    int order = excelTitle.getOrder();
                    Class<?> type = excelTitle.getType();
                    String getMethod = "get" + attr.substring(0, 1).toUpperCase()
                            + attr.substring(1);
                    Method method = clazz.getMethod(getMethod, new Class[] {});
                    Object value = method.invoke(obj, new Object[] {});
                    HSSFCell cell = row.createCell(order);
                    if (value != null) {
                        if (Double.class.equals(type)) {
                            cellStyle = ExcelUtils.setCellStyleAlignment(cellStyle,
                                    CellStyle.ALIGN_RIGHT, CellStyle.VERTICAL_CENTER);
                            cellStyle = ExcelUtils.setCellFormat(helper, cellStyle, "#,##0.00");
                            cell.setCellStyle(cellStyle);
                            double doubleValue = Double.valueOf(value.toString());
                            cell.setCellValue(doubleValue);
                        } else if (Long.class.equals(type)) {
                            cellStyle = ExcelUtils.setCellStyleAlignment(cellStyle,
                                    CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);
                            cell.setCellStyle(cellStyle);
                            long longValue = Long.valueOf(value.toString());
                            cell.setCellValue(longValue);
                        } else if (String.class.equals(type)) {
                            //                            cellStyle = ExcelUtils.setCellStyleAlignment(cellStyle,
                            //                                    CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);
                            //                            cell.setCellStyle(cellStyle);
                            cellStyle.setWrapText(true);   
                            cell.setCellStyle(cellStyle);
                            cell.setCellValue(new HSSFRichTextString(value.toString()));
                        } else if (Date.class.equals(type)) {
                            // TODO 处理时间
                            SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                            String ctime = format.format(value); 
                            cell.setCellValue(ctime);
                        }
                        else if (BigDecimal.class.equals(type)) {
                            BigDecimal bigDecimal=(BigDecimal) value;
                            String bigDecimalValue = bigDecimal.toString();
                            cell.setCellValue(bigDecimalValue);
                        }else if(Integer.class.equals(type)){
                            if(value != null){
                                 cell.setCellValue(Integer.parseInt((value.toString())));
                            }
                        }
                    }
                }
                rowNum++;
            }
        }
        return wb;
    }     public static CellStyle createStyleCell(Workbook wb) {
        CellStyle cellStyle = wb.createCellStyle();
        //        // 设置一个单元格边框颜色
        //        cellStyle.setBorderBottom(CellStyle.BORDER_THIN);
        //        cellStyle.setBorderTop(CellStyle.BORDER_THIN);
        //        cellStyle.setBorderLeft(CellStyle.BORDER_THIN);
        //        cellStyle.setBorderRight(CellStyle.BORDER_THIN);
        //        // 设置一个单元格边框颜色
        //        cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
        //        cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
        //        cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
        //        cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());         return cellStyle;
    }     /**
     * 设置文字在单元格里面的位置 CellStyle.ALIGN_CENTER CellStyle.VERTICAL_CENTER
     * 
     * @param cellStyle
     * @param halign
     * @param valign
     * @return
     */
    public static CellStyle setCellStyleAlignment(CellStyle cellStyle, short halign, short valign) {
        // 设置上下
        cellStyle.setAlignment(halign);
        // 设置左右
        cellStyle.setVerticalAlignment(valign);
        return cellStyle;
    }     /**
     * 格式化单元格 如#,##0.00,m/d/yy去HSSFDataFormat或XSSFDataFormat里面找
     * 
     * @param cellStyle
     * @param fmt
     * @return
     */
    public static CellStyle setCellFormat(CreationHelper helper, CellStyle cellStyle, String fmt) {
        // 还可以用其它方法创建format
        cellStyle.setDataFormat(helper.createDataFormat().getFormat(fmt));
        return cellStyle;
    }     /**
     * 设置字体
     * 
     * @param wb
     * @return
     */
    public static Font createFonts(Workbook wb) {
        // 创建Font对象
        Font font = wb.createFont();
        // 设置字体
        font.setFontName("微软雅黑");
        // 着色
        font.setColor(HSSFColor.BLACK.index);
        return font;
    }     /**
     * 生成EXCEL通用方法使用的表头类
     * 
     * @author cuijianxing
     * 
     */
    public static class ExcelTitle {         private int order;         private Class<?> type;         private String title;         public int getOrder() {
            return order;
        }         public void setOrder(int order) {
            this.order = order;
        }         public String getTitle() {
            return title;
        }         public void setTitle(String title) {
            this.title = title;
        }         public Class<?> getType() {
            return type;
        }         public void setType(Class<?> type) {
            this.type = type;
        }         public ExcelTitle(int order, Class<?> type, String title) {
            super();
            this.order = order;
            this.type = type;
            this.title = title;
        }     }

}

controller层:

@RequestMapping(value = "/downloadUserData", method = RequestMethod.GET)
    public void downloadUserData(HttpServletRequest request,
            HttpServletResponse response) {
        response.setContentType("application/x-excel");
        response.setHeader("content-disposition", "attachment;filename="
                + "UserData.xls");
        response.setCharacterEncoding("UTF-8");
        List<User> users = userService.getUserList();
        Map<String, ExcelUtils.ExcelTitle> titleMap = this.getExcelTitleMap();
        OutputStream ouputStream = null;
        try {
            HSSFWorkbook workBook = ExcelUtils.generateExcel(User.class, users,
                    titleMap);
            ouputStream = response.getOutputStream();
            workBook.write(ouputStream);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                ouputStream.flush();
                ouputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }     private Map<String, ExcelUtils.ExcelTitle> getExcelTitleMap() {
        Map<String, ExcelUtils.ExcelTitle> titleMap = new HashMap<String, ExcelUtils.ExcelTitle>();         ExcelUtils.ExcelTitle excelTitle0 = new ExcelUtils.ExcelTitle(0,
                String.class, "序号");
        titleMap.put("id", excelTitle0);         ExcelUtils.ExcelTitle excelTitle1 = new ExcelUtils.ExcelTitle(1,
                String.class, "姓名");
        titleMap.put("name", excelTitle1);         ExcelUtils.ExcelTitle excelTitle2 = new ExcelUtils.ExcelTitle(2,
                String.class, "电话");
        titleMap.put("phone", excelTitle2);         ExcelUtils.ExcelTitle excelTitle3 = new ExcelUtils.ExcelTitle(2,
                String.class, "地址");
        titleMap.put("address", excelTitle3);         return titleMap;

}

代码下载:

https://github.com/vincentduan/UploadExcel.git

下载数据到Excel,工具类的更多相关文章

  1. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  2. Python Excel工具类封装, 给excel表头搞点颜色

    封装Excel工具类 我们常用的excel工具类,读有xlrd,写有xlwt.有读有写,新一代库有pandas,openpyxl等等. 大家用法都差不多,今天博主就介绍新手最爱,我也爱的xlrd和xl ...

  3. excel工具类

    excel工具类 import com.iport.framework.util.ValidateUtil; import org.apache.commons.lang3.StringUtils; ...

  4. 导入导出Excel工具类ExcelUtil

    前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...

  5. 自己封装的poi操作Excel工具类

    自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...

  6. java 解析excel工具类

      java 解析excel工具类 CreateTime--2018年3月5日16:48:08 Author:Marydon ReadExcelUtils.java import java.io.Fi ...

  7. Java解析Excel工具类(兼容xls和xlsx)

    依赖jar <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml&l ...

  8. java里poi操作Excel工具类【我改】

    参考原文: https://www.cnblogs.com/yizhang/p/7244917.html 我改: package test; import java.io.File; import j ...

  9. java操作excel 工具类

    java操作excel 可参考https://blog.csdn.net/xunwei0303/article/details/53213130 直接上代码: 一.java生成excel文件: pac ...

  10. javaEE开发之导出excel工具类

    web开发中,一个系统的普通需求也包含导出excel,一般採用POI做统计报表导出excel. 导出excel工具类: import java.io.FileOutputStream; import ...

随机推荐

  1. 众皓网络(T 面试)

    1.你们项目中哪里用到了Redis? 2.Redis中存储的数据,你们什么时候进行更新? 3.你用过消息队列吗? 4.你写的这个微服务项目拆分成了几个服务? 5.SpringCloud项目怎么部署的?

  2. ignore-on-commit svn 更改文件后 默认不提交文件到服务器(服务器上已存在的文件)

    不用那个忽略文件那个,那个功能是删除服务器的文件,然后本地还存在,不符合我的要求 我的要求是 服务器文件在,我不动,然后我改完了,和别人的不冲突,我也不覆盖别人的文件 主要就是默认不提交,这个很重要 ...

  3. Opencascade 选择器算法

    算法的阶段 该算法包括预处理和三个主要阶段. 使用深度优先搜索逐层遍历所有对象 . 预处理 计算平截头体及其主要特征的计算. 第一阶段 - 遍历第一级BVH树 在成功构建选择平截头体之后,算法开始遍历 ...

  4. B6. Concurrent 内存模型与线程交互

    [概述]

  5. ArrayList 和 LinkedList 区别。

    1. ArrayList和LinkedList都是实现了List接口的容器类,用于存储一系列的对象引用.他们都可以对元素的增删改查进行操作. 2. ArrayList是实现了基于动态数组的数据结构,L ...

  6. Ubuntu中python链接本地数据库

    由于python链接数据库需要下载DB API模块:例如你需要访问Mysql数据,你需要MySQL数据库模块. DB-API是一个规范. 以便为不同的底层数据库系统和数据库接口程序提供一致的访问接口. ...

  7. 【开发工具安装配置】MyEclipse,Tomcat,Mysql安装配置

    配置步骤 注:以下路径仅供参考! 一.MyEclipse10 1. 1 破解版破解说明: (1)下载安装好Myeclipse,先不要运行. (2)打开破解工具目录下的cracker.jar文件或run ...

  8. Python面向对象之文件操作

    文件的概念 文件的概念和作用 计算机的文件,就是存储在某种长期存储设备上的一段数据:长期存储设备包括:U盘,硬盘,移动硬盘,光盘,等: 文件的作用:将数据长期保存,在需要的时候使用: 文件的存储方式 ...

  9. java io-----转

    https://blog.csdn.net/zch19960629/article/details/77917739 输入输出的重要性:     输入和输出功能是Java对程序处理数据能力的提高,Ja ...

  10. OpenSSH高级功能之端口转发(Port Forwarding)

    在RedHat提供的系统管理员指南中提到OpenSSH不止是一个安全shell,它还具有X11转发(X11 Forwarding)和端口转发(Port Forwarding)的功能.X11功能一般用于 ...