zoukankan      html  css  js  c++  java
  • 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>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    代码实现
    因为为了方便所以本代码。。。就是基本上没有修改的项目代码。。。所以又看不懂的话。。多担待 -_-!!!

    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();
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    上面的代码中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);
    }
    }
    ————————————————
    版权声明:本文为CSDN博主「INC随我」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_38542085/article/details/99416630

  • 相关阅读:
    病毒软件测试代码
    如何将WIN安全设置重置回默认值
    今天值班非常不爽。
    FTP命令(2)
    WORD操作
    DELPHI事务
    DELPHI一些常用的技巧
    钩子学习心得
    (转 )Delphi指针如何指向使用with开域语句创建的无名组件对象
    WebBrowser 操作记要 (DELPHI)
  • 原文地址:https://www.cnblogs.com/telwanggs/p/13095132.html
Copyright © 2011-2022 走看看