栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

EasyPoi和EasyExcel的案列

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

EasyPoi和EasyExcel的案列

EasyExcel案列

引入

 
        
            com.alibaba
            easyexcel
            2.2.6
        
定义实体类

Person

@Data

public class Person {

    @ExcelProperty(value = "a") //导出列标题名
    int a;
    @ExcelProperty(value = "b")
    String b;
}
写一个controller测试

ExcelController.java

@RestController
public class ExcelController {

    
    @GetMapping("/excel")
    public void excel(HttpServletResponse response) throws IOException {
        setExcelRespProp(response, "会员列表222");//导出的标题名称
        ArrayList people = new ArrayList<>();
        Person person = new Person();
        person.setB("1111");
        person.setA(2222);
        people.add(person);
        EasyExcel.write(response.getOutputStream())
                .head(Person.class)
                .excelType(ExcelTypeEnum.XLSX)
                .sheet("会员列表")//第一个sheet的名称
                .doWrite(people);
    }




    private void setExcelRespProp(HttpServletResponse response, String rawFileName) throws UnsupportedEncodingException {
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        String fileName = URLEncoder.encode(rawFileName, "UTF-8").replaceAll("\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
    }





    @PostMapping("/import")
    public int  importMemberList(@RequestPart("file") MultipartFile file) throws IOException {
        List memberList = EasyExcel.read(file.getInputStream())
                .head(Person.class)
                .sheet()
                .doReadSync();
        System.out.println(memberList);
        return 1;
    }
}
postman测试 点击send and download即可测试导出


测试导入

EasyPoi案例
        
            cn.afterturn
            easypoi-base
            4.1.0
        
        
            cn.afterturn
            easypoi-web
            4.1.0
        
        
            cn.afterturn
            easypoi-annotation
            4.1.0
        
创建工具类用于设置导出表格的样式

ExcelStyleUtil.java

public class ExcelStyleUtil implements IExcelExportStyler {
    private static final short STRING_FORMAT = (short) BuiltinFormats.getBuiltinFormat("TEXT");
    private static final short FONT_SIZE_TEN = 9;
    private static final short FONT_SIZE_ELEVEN = 10;
    private static final short FONT_SIZE_TWELVE = 10;
    
    private CellStyle headerStyle;
    
    private CellStyle titleStyle;
    
    private CellStyle styles;

    public ExcelStyleUtil(Workbook workbook) {
        this.init(workbook);
    }

    
    private void init(Workbook workbook) {
        this.headerStyle = initHeaderStyle(workbook);
        this.titleStyle = initTitleStyle(workbook);
        this.styles = initStyles(workbook);
    }

    
    @Override
    public CellStyle getHeaderStyle(short color) {
        return headerStyle;
    }

    
    @Override
    public CellStyle getTitleStyle(short color) {
        return titleStyle;
    }

    
    @Override
    public CellStyle getStyles(boolean parity, ExcelExportEntity entity) {
        return styles;
    }

    
    @Override
    public CellStyle getStyles(Cell cell, int dataRow, ExcelExportEntity entity, Object obj, Object data) {
        return getStyles(true, entity);
    }

    
    @Override
    public CellStyle getTemplateStyles(boolean isSingle, ExcelForEachParams excelForEachParams) {
        return null;
    }

    
    private CellStyle initHeaderStyle(Workbook workbook) {
        CellStyle style = getbaseCellStyle(workbook);
        style.setFont(getFont(workbook, FONT_SIZE_TWELVE, true));
        return style;
    }

    
    private CellStyle initTitleStyle(Workbook workbook) {
        CellStyle style = getbaseCellStyle(workbook);
        style.setFont(getFont(workbook, FONT_SIZE_ELEVEN, false));
        //背景色
        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        return style;
    }

    
    private CellStyle initStyles(Workbook workbook) {
        CellStyle style = getbaseCellStyle(workbook);
        style.setFont(getFont(workbook, FONT_SIZE_TEN, false));
        style.setDataFormat(STRING_FORMAT);
        return style;
    }

    
    private CellStyle getbaseCellStyle(Workbook workbook) {
        CellStyle style = workbook.createCellStyle();
        //下边框
        style.setBorderBottom(BorderStyle.THIN);
        //左边框
        style.setBorderLeft(BorderStyle.THIN);
        //上边框
        style.setBorderTop(BorderStyle.THIN);
        //右边框
        style.setBorderRight(BorderStyle.THIN);
        //水平居中
        style.setAlignment(HorizontalAlignment.CENTER);
        //上下居中
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        //设置自动换行
        style.setWrapText(true);
        return style;
    }

    
    private Font getFont(Workbook workbook, short size, boolean isBold) {
        Font font = workbook.createFont();
        //字体样式
        font.setFontName("宋体");
        //是否加粗
        font.setBold(isBold);
        //字体大小
        font.setFontHeightInPoints(size);
        return font;
    }



}

定义实体类

CourseDomain.java 课程实体
StudentDomain.java 学生实体
TeacherDomain.java 老师实体
关系是一门课程一个老师多个学生
CourseDomain.java

@Data
@ExcelTarget("CourseDomain")
public class CourseDomain implements java.io.Serializable{

    
    private String        id;
    
    @Excel(name = "课程名称", orderNum = "1", width = 25,needMerge = true)
    private String        name;
    
    @ExcelEntity(id = "absent")
    private TeacherDomain mathTeacher;

    @ExcelCollection(name = "学生", orderNum = "4")
    private List students;
}

StudentDomain.java

@Data
public class StudentDomain implements java.io.Serializable {

    private String        id;
    
    @Excel(name = "学生姓名", height = 20, width = 30, isimportField = "true_st")
    private String        name;
    
    @Excel(name = "学生性别", replace = { "男_1", "女_2" }, suffix = "生", isimportField = "true_st")
    private int           sex;

    @Excel(name = "出生日期", databaseFormat = "yyyyMMddHHmmss", format = "yyyy-MM-dd", isimportField = "true_st", width = 20)
    private Date birthday;
    @Excel(name = "进校日期", databaseFormat = "yyyyMMddHHmmss", format = "yyyy-MM-dd")
    private Date registrationDate;
}

TeacherDomain.java

@Data
@ExcelTarget("TeacherDomain")
public class TeacherDomain {

    private String id;
    
    @Excel(name = "主讲老师_major,代课老师_absent", orderNum = "1", isimportField = "true_major,true_absent")
    private String name;
}

controller 层测试

EasyPoiController.java

@RestController
@RequestMapping("/easypoi")
public class EasyPoiController {

    
    public static  void response(HttpServletRequest request, HttpServletResponse response,Workbook workbook){
        // 重置响应对象
        response.reset();
        // 当前日期,用于导出文件名称
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String dateStr = "["+"excelName"+"-"+sdf.format(new Date())+"]";
        // 指定下载的文件名--设置响应头  xls 或者xlsx都可以
        response.setHeader("Content-Disposition", "attachment;filename=" +dateStr+".xls");
       // response.setHeader("Content-Disposition", "attachment;filename=" +dateStr+".xlsx");
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        // 写出数据输出流到页面
        try {
            OutputStream output = response.getOutputStream();
            BufferedOutputStream bufferedOutPut = new BufferedOutputStream(output);
            workbook.write(bufferedOutPut);
            bufferedOutPut.flush();
            bufferedOutPut.close();
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }



    }

    
    public static List studentList(){
        ArrayList list = new ArrayList<>();
        StudentDomain studentDomain = new StudentDomain();
        StudentDomain studentDomain2 = new StudentDomain();
        studentDomain.setId("1");
        studentDomain.setName("zhangsan ");
        studentDomain.setBirthday(new Date());
        studentDomain.setRegistrationDate(new Date());
        studentDomain.setSex(1);
        studentDomain2.setId("2");
        studentDomain2.setName("lisi");
        studentDomain2.setBirthday(new Date());
        studentDomain2.setRegistrationDate(new Date());
        studentDomain2.setSex(1);
        list.add(studentDomain);
        list.add(studentDomain2);
        return list;

    }
    
    public static List teacherList(){
        ArrayList list = new ArrayList<>();
        TeacherDomain teacherDomain = new TeacherDomain();
        TeacherDomain teacherDomain2 = new TeacherDomain();
        teacherDomain.setId("1001");
        teacherDomain.setName("老师1");
        teacherDomain2.setId("1002");
        teacherDomain2.setName("老师2");
        list.add(teacherDomain);
        list.add(teacherDomain2);
        return list;

    }

    
    public static List courseList(){
        List stulist = studentList();
        List tealist = teacherList();
        ArrayList list = new ArrayList<>();

        CourseDomain courseDomain = new CourseDomain();
        courseDomain.setId("1");
        courseDomain.setName("课程1");
        courseDomain.setMathTeacher((TeacherDomain)tealist.get(0));
        courseDomain.setStudents(stulist);

        list.add(courseDomain);

        return list;

    }

    
    @PostMapping("/exportstudent")
    public void easyStudentExport(HttpServletRequest request, HttpServletResponse response){
        List list = studentList();
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("计算机一班学生","学生"),
                StudentDomain.class, list);
        response(request,response,workbook);

    }


    

    @PostMapping("/exportStudentCourse")
    public void exportStudentCourse(HttpServletRequest request, HttpServletResponse response){

        List list = courseList();
        ExportParams parm = new ExportParams(null, null, "测试");

        parm.setStyle(ExcelStyleUtil.class);//设置样式

        //导出
        Workbook workbook = ExcelExportUtil.exportExcel(parm,
                CourseDomain.class, list);

        //io写入
        response(request,response,workbook);

    }

    
    @PostMapping("/importexcel")
    public void importexcel(@RequestParam("file") MultipartFile file){
        importParams importParams = new importParams();
        // 数据处理
        //表格标题行数,默认0
       // importParams.setHeadRows(1);
        //表头行数,默认1
      //  importParams.setTitleRows(1);
        try {
            ExcelimportResult result = ExcelimportUtil.importExcelMore(file.getInputStream(), CourseDomain.class, importParams);
            List list = result.getList();
            System.out.println(list);

        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("IOException");
        } catch (Exception e1) {
            
            e1.printStackTrace();
            System.out.println("Exception");
        }

    }
    
}

注意

注意点 要么用easypoi 要么用easyexcel 两个包都引用可能会导致版本问题出错 去pom.xml注释掉一个即可

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703225.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号