Springboot集成POI

本文比较简单。。。希望想真正使用的同学。。去看别人整理的吧。。。我怕这次整理比较乱。。影响大家阅读

什么是POI

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

添加依赖

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>RELEASE</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>RELEASE</version>
</dependency>

代码实现

因为为了方便所以本代码。。。就是基本上没有修改的项目代码。。。所以又看不懂的话。。多担待 -_-!!!

public String exportExcel(List<Object> data, Class<?> clazz) {

        OutputStream outputStream = null;
        File[] roots = File.listRoots();
        String path = roots[0].getPath();
        try {
            Field[] fields = data.getClass().getDeclaredFields();
            //实例化HSSFWorkbook
            HSSFWorkbook workbook = new HSSFWorkbook();
            //创建一个Excel表单,参数为sheet的名字
            HSSFSheet sheet = workbook.createSheet("sheet");
            //设置表头
            setTitle(workbook, sheet, clazz);
            //设置单元格并赋值
            setData(sheet, data, clazz);
        } catch (Exception e) {
            logger.info("ExcelUtil.exportExcel : 导出解析失败!");
            e.printStackTrace();
        }
    }

    private void setTitle(HSSFWorkbook workbook, HSSFSheet sheet, Class<?> clazz) {
        ClassField classField = new ClassField();

        List<String> list = classField.map.get(clazz);
        logger.info("ExcelUtil.setTitle : 这是map信息:" + classField.map);
        logger.info("ExcelUtil.setTitle : 这是头信息:" + list);
        try {
            HSSFRow row = sheet.createRow(0);
            //设置列宽,setColumnWidth的第二个参数要乘以256,这个参数的单位是1/256个字符宽度
            for (int i = 0; i < list.size(); i++) {
                sheet.setColumnWidth(i, 15 * 256);
            }
            //设置为居中加粗,格式化时间格式
            HSSFCellStyle style = workbook.createCellStyle();
            HSSFFont font = workbook.createFont();
            font.setBold(true);
            style.setFont(font);
            style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
            //创建表头名称
            HSSFCell cell;
            for (int j = 0; j < list.size(); j++) {
                cell = row.createCell(j);
                cell.setCellValue(list.get(j));
                cell.setCellStyle(style);
            }
        } catch (Exception e) {
            logger.info("ExcelUtil.setTitle : 导出时设置表头失败!");
            e.printStackTrace();
        }
    }

    private static void setData(HSSFSheet sheet, List<Object> data, Class<?> clazz) {
        try {
            int rowNum = 1;
            Field[] fields = clazz.getDeclaredFields();
            for (int i = 0; i < data.size(); i++) {
                HSSFRow row = sheet.createRow(rowNum);
                for (int j = 0; j < fields.length; j++) {
                    // 对于每个属性,获取属性名
                    String varName = fields[j].getName();
                    try {
                        // 获取原来的访问控制权限
                        boolean accessFlag = fields[j].isAccessible();
                        // 修改访问控制权限
                        fields[j].setAccessible(true);
                        // 获取在对象f中属性fields[i]对应的对象中的变量
                        Object o;
                        try {
                            o = fields[j].get(data.get(i));
                            row.createCell(j).setCellValue(String.valueOf(o));
                        } catch (IllegalAccessException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        // 恢复访问控制权限
                        fields[i].setAccessible(accessFlag);
                    } catch (IllegalArgumentException ex) {
                        ex.printStackTrace();
                    }
                }
                rowNum++;
            }
            logger.info("ExcelUtil.setTitle : 表格赋值成功!");
        } catch (Exception e) {
            logger.info("ExcelUtil.setTitle : 表格赋值失败!");
            e.printStackTrace();
        }
    }

上面的代码中ClassField.java代码

public class ClassField {

    public Map<Class<?>, List> map = new HashMap<>();

    public ClassField() {
        List<String> gradingLoglist = new ArrayList<>();
        gradingLoglist.add("ID");
        gradingLoglist.add("问卷ID");
        gradingLoglist.add("问卷时间");
        gradingLoglist.add("问卷简介");
        gradingLoglist.add("被评人ID");
        gradingLoglist.add("被评人姓名");
        gradingLoglist.add("分数");
        map.put(GradingLogPo.class, gradingLoglist);
        List<String> submitInfoList = new ArrayList<>();
        submitInfoList.add("ID");
        submitInfoList.add("评分人ID");
        submitInfoList.add("评分人姓名");
        submitInfoList.add("被评人ID");
        submitInfoList.add("被评人姓名");
        submitInfoList.add("问卷ID");
        submitInfoList.add("问卷简介");
        submitInfoList.add("评分规则ID");
        submitInfoList.add("分数");
        submitInfoList.add("备注");
        map.put(SubmitInformationPo.class, submitInfoList);
    }
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值