zoukankan      html  css  js  c++  java
  • java 导出excel

    1.需要传入三个集合,标题的集合,key值对应数据的字段集合(可以不传但是数据就必须和标题一一对应),数据的集合

    2.输出流
    try (OutputStream out = response.getOutputStream()) {
    String fileName = "test";
    response.setContentType("application/x-download");
    response.setCharacterEncoding("UTF-8");
    response.setHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes(), "ISO8859-1") + ".xlsx");
    export.write(out);
    }


    3.导出工具类


    @Service

    public class ExcelService {

    /**
    *
    * @param titles 表格第一行,表头
    * @param keys 实体类对象字典keys; 如果为null,则返回获取dataList所有字段;
    * @param dataList 数据集合
    * @param <T> 如果是实体bean,header是反射获取所有字段;如果是JsonObject,header是获取所有key
    * @return
    * @throws Exception
    */
    public <T> HSSFWorkbook export(List<String> titles, List<String> keys, List<T> dataList) throws Exception {

    //1.创建工作薄
    HSSFWorkbook wb = new HSSFWorkbook();
    if (dataList == null || dataList.isEmpty()) {
    return wb;
    }

    String[] excelHeader;
    if(keys == null){
    Collection<String> fields = fields(dataList.get(0));
    excelHeader = fields.toArray(new String[]{});
    }else{
    excelHeader = keys.toArray(new String[]{});
    }


    //2.创建表
    HSSFSheet sheet = wb.createSheet("sheet1");
    //2.1设置列宽(必须先设置列宽然后设置行高,不然列宽没有效果)
    sheet.setDefaultColumnWidth(15);
    //2.2设置列高
    // sheet.setDefaultRowHeight((short) 100);
    //3.创建行
    //4.生成样式
    HSSFCellStyle style = wb.createCellStyle();
    //4.1设置水平居中
    style.setAlignment(HorizontalAlignment.CENTER);
    //4.2设置垂直居中
    // style.setVerticalAlignment(VerticalAlignment.CENTER);
    //4.3设置背景颜色
    // style.setFillForegroundColor(HSSFColor.HSSFColorPredefined.ROYAL_BLUE.getIndex());
    // style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    // style.setFillBackgroundColor(HSSFColor.HSSFColorPredefined.ROYAL_BLUE.getIndex());
    //4.4设置边框
    // style.setBorderBottom(BorderStyle.THIN);
    // style.setBorderLeft(BorderStyle.THIN);
    // style.setBorderRight(BorderStyle.THIN);
    // style.setBorderTop(BorderStyle.THIN);
    //5 设置字体
    // HSSFFont font = wb.createFont();
    // font.setFontHeightInPoints((short) 10);
    // font.setColor(HSSFColor.HSSFColorPredefined.RED.getIndex());
    // font.setBold(true);
    // font.setFontName("宋体");
    //6.把字体给当前样式
    // style.setFont(font);
    //7.设置表头
    String[] titlesArray = titles.toArray(new String[]{});
    HSSFRow headerRow = sheet.createRow(0);
    for (int i = 0; i < titlesArray.length; i++) {
    HSSFCell cell = headerRow.createCell(i);
    cell.setCellValue(titlesArray[i]);
    cell.setCellStyle(style);
    }
    //添加数据
    for (int i = 0; i < dataList.size(); i++) {
    HSSFRow dataRow = sheet.createRow(i + 1);
    T line = dataList.get(i);
    if (JSONObject.class.isInstance(line)) {
    JSONObject data = (JSONObject) line;
    for (int j = 0; j < excelHeader.length; j++) {
    String header = excelHeader[j];
    dataRow.createCell(j).setCellValue(data.getString(header));
    }
    } else {// java bean
    for (int j = 0; j < excelHeader.length; j++) {
    String header = excelHeader[j];
    String UTitle = Character.toUpperCase(header.charAt(0)) + header.substring(1, header.length());
    String methodName = "get" + UTitle;
    Method method = line.getClass().getDeclaredMethod(methodName);
    String data = method.invoke(line) == null ? "" : method.invoke(line).toString();
    dataRow.createCell(j).setCellValue(data);
    }
    }
    }
    return wb;
    }

    private Collection<String> fields(Object line) {
    if (JSONObject.class.isInstance(line)) {
    return ((JSONObject) line).keySet();
    } else {// java bean
    return Arrays.stream(line.getClass().getDeclaredFields()).map(field -> field.getName()).collect(Collectors.toList());
    }
    }
    }



  • 相关阅读:
    Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor
    Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Security
    IdentityServer4 And AspNetCore.Identity Get AccessToken 问题
    Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attribute
    Java Spring Boot VS .NetCore (七) 配置文件
    Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtml
    Java Spring Boot VS .NetCore (五)MyBatis vs EFCore
    Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore
    Java Spring Boot VS .NetCore (三)Ioc容器处理
    Java Spring Boot VS .NetCore (二)实现一个过滤器Filter
  • 原文地址:https://www.cnblogs.com/bt2882/p/13176698.html
Copyright © 2011-2022 走看看