JAVA WEB的Excel导出的通用型方法

JAVA WEB的Excel导出的通用型方法

下面是一个工具类, fillExcelDataWithTemplate()是生成EXCEL的方法, ConvertObjToMap()是将数据库取出的实体类对象转为List的方法

public class OutExcel {
    public static HSSFWorkbook fillExcelDataWithTemplate(List<List> list, String[] titles, String sheetname) {


        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet(sheetname);//名称
        Integer rownum = titles.length;
        sheet.setDefaultColumnWidth(rownum + 4);
        HSSFRow row0 = sheet.createRow(0);
        int count = 0;
        for (int i = 0; i < titles.length; i++) {
            while (titles[i].equals("1")) {
                i++;
                count++;
                if (i >= titles.length) {
                    break;
                }
            }
            if (i >= titles.length) {
                break;
            }
            row0.createCell(i - count).setCellValue(titles[i]);
        }
        int rowIndex = 1;
        HSSFRow row;
        for (List list1 : list) {
            row = sheet.createRow(rowIndex);
            rowIndex++;
            int count1 = 0;
            for (int i = 0; i < list1.size(); i++) {
                while (titles[i].equals("1")) {
                    i++;
                    count1++;
                    if (i >= titles.length) {
                        break;
                    }
                }
                if (i >= titles.length) {
                    break;
                }
                row.createCell(i - count1).setCellValue((String) list1.get(i));
            }
        }
        return wb;
    }


    public static ArrayList ConvertObjToMap(Object obj) {
        ArrayList<String> list = new ArrayList<String>();
        if (obj == null)
            return null;
        Field[] fields = obj.getClass().getDeclaredFields();
        try {
            for (int i = 0; i < fields.length; i++) {
                try {
                    Field f = obj.getClass().getDeclaredField(fields[i].getName());
                    f.setAccessible(true);
                    Object o = f.get(obj);
                    if (o != "" && o != null) {
                        if (o instanceof Date) {
                            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  //时间格式化
                            list.add(sf.format(o));
                        } else {
                            list.add(o.toString());
                        }
                    } else {
                        list.add("");
                    }
                } catch (NoSuchFieldException e) {

                    e.printStackTrace();
                } catch (IllegalArgumentException e) {

                    e.printStackTrace();
                } catch (IllegalAccessException e) {

                    e.printStackTrace();
                }
            }
        } catch (SecurityException e) {

            e.printStackTrace();
        }
        return list;
    }

}

其中 ConvertObjToMap()方法是通过反射来实现的,其中做了日期的格式化和为空的操作。
List list, String[] titles, String sheetname list为需要导出转化后的数据,titles为需要输出的表头名称,sheetname为工作簿的名称。
下面是调用上面方法的程序片段:

 List<List> list = standbyManagementService.getAbnormalStandbyExcel(request);
        String sheetname = "异常备机列表";
        String[] titles = {"设备号码","所属单位","1","日工作时间(单位:小时)","总工作时间(单位:小时)","统计信息上传时间","相对位置","1"};

        HSSFWorkbook wb = OutExcel.fillExcelDataWithTemplate(list,titles,sheetname);
        ExcelUtil.export(response,wb,"异常备机列表.xls");

上面为控制器中的一段代码,其中需要注意的是titles中的”1“表示实体类中该位置的字段不想显示在导出的excel表格中,因此在这里设为1,后面将会做判断。

 List list1 = new ArrayList();
            for (AbnormalStandbyModel testlist : list) {
                ArrayList<String> list2 = new ArrayList<String>();
                list2 = OutExcel.ConvertObjToMap(testlist);
                list1.add(list2);
            }
            return list1;

上面一段代码就是业务层把实体类对象的数据一条一条的转换为List.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值