SpringBoot使用反射机制和POI实现分页导出数据到Excel

首先在pom.xml文件中导入相关的依赖


          org.apache.poi
          poi-ooxml
          3.15-beta2
      

下面开始编写导出代码(主要为了实现功能,样式细节可以自己去百度了解)
使用的是泛型集合

public class dervedForm {

    public void getExcel(OutputStream outputStream, List list) throws IllegalAccessException, IOException {
//创建工作簿对象
        XSSFWorkbook workbook = new XSSFWorkbook();
          //max为每一页最大显示行数,需要封装工具类可以写在入参列表中
        int max = 100;
//这个是一个标记,用来判断当前数据量需要分为几页来显示
        int z = 1;
//变量Z会参与下面的循环中,如果if成立对于当前代码来说就是需要插入的行数刚好是max的倍数
        if (list.size() % max == 0) {
            z = 0;
        }
//使用三层循环,循环条件参考上面的注解
        for (int i = 0; i < list.size() / max + z; i++) {
//这个对象就是Excel中的页,参数为页面名字

            XSSFSheet sheet = workbook.createSheet("第" + i+"页");
//这个是表格的表头信息,需要封装类的可以使用入参传入
            String[] headerStr = new String[]{"企业id", "店铺id", "批次号", "商户订单号", "订单状态(1--待付款;" +
                    "2--待确认;3--待发货;4--待收货;5--已完成;6--已取消;)", "付款状态(0--未支付;1--已支付;)", "商品总数量", "订单商品总金额(商城价)", "订单实际金额", "订单支付金额(支付后填充)", "订单支付时间", "订单优惠金额", "折扣(0.1=10%)", "创建用户", "是否已经同步到erp(0--未同步;1--已同步;)", "店铺数据编码"};
        //创建行,标题在第0行
            XSSFRow headerROW = sheet.createRow(0);
            for (int p = 0; p < headerStr.length; p++) {
                //宽度
                sheet.setColumnWidth(p, 5000);
            }

            //设置头单元格风格
            XSSFCellStyle headerStyle = workbook.createCellStyle();
            //居中
            headerStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
            //设置字体
            XSSFFont headerFont = workbook.createFont();

            headerFont.setFontName("宋体");
          //提交字体风格
            headerStyle.setFont(headerFont);
            //循环给表头赋值
            for (int p = 0; p < headerStr.length; p++) {
                //创建一个单元格
                XSSFCell headerCell = headerROW.createCell(p);
                //插入设计的风格  
                headerCell.setCellStyle(headerStyle);
              //插入标题
                headerCell.setCellValue(headerStr[p]);

            }
            //设置头单元格风格    bodyStyle是表体
            XSSFCellStyle bodyStyle = workbook.createCellStyle();
            //居中
            headerStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
            //设置字体
            XSSFFont bodyFont = workbook.createFont();

            headerFont.setFontName("微软雅黑");

            headerStyle.setFont(bodyFont);
          //循环插入表体数据
            for (int p=0; p < max; p++){
              //  判断越界
                if (p + i * max == list.size()){
                    break;
                }
                  //插入在第P+1行(之所以加一是因为第一行写了标题)
                XSSFRow bodyROW = sheet.createRow(p + 1);
              //通过反射获得当前位置下的入参集合中的对象属性值装入到数组中
                Field[] declaredFields = list.get(p + i * max).getClass().getDeclaredFields();
                for (int j=0;j

到这里写入完成,只需要调用即可,在调用处创建文件流传入参数即可

最后补充一下,如果对导出的版本有疑问的话, XSSFWorkbook创建的是2007后的Excel , HSSFWorkbook创建的是2003的,其他完全没有区别。

实现效果

图片.png

你可能感兴趣的:(SpringBoot使用反射机制和POI实现分页导出数据到Excel)