整合 JXLS模版导出excel表格

1、引入 包 -

       
        
            cn.afterturn
            easypoi-spring-boot-starter
            3.3.0
        

        
            com.auth0
            java-jwt
            3.8.1
        

        
        
            org.apache.poi
            poi
            3.17
        

        
            org.apache.poi
            poi-excelant
            3.17
        

        
        
            com.aspose
            cells
            8.5.2
        

        
            org.jxls
            jxls
            2.5.1
        

        
            org.jxls
            jxls-poi
            1.1.0
        

        
            org.jxls
            jxls-jexcel
            1.0.6
        

        
            net.sf.jxls
            jxls-core
            1.0-RC-1
        

2、核心代码

3、第一步导入包报错 ,3.9升级为3.17 并且修改了 项目中低版本poi的使用红色报错

-   Cannot load XLS transformer. Please make sure a Transformer implementation is in classpath

4、poi升级的bug  原文链接:https://blog.csdn.net/darkula/article/details/128197094

报错1: HSSFFont.BOLDWEIGHT_BOLD CellStyle.BORDER_THIN

代码如下:

//      f.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗
        f.setBold(true);// 加粗

//            cellStyle.setBorderLeft(CellStyle.BORDER_THIN); // 左边边框
                cellStyle.setBorderLeft(BorderStyle.THIN); // 左边边框

解决办法:将 BorderStyle.THIN 替换 注释中的代码即可
报错2:CellStyle.ALIGN_CENTER

代码如下:

    //            cellStyle.setAlignment(CellStyle.ALIGN_CENTER); // 设置单元格水平方向对其方式
                cellStyle.setAlignment(HorizontalAlignment.CENTER); // 设置单元格水平方向对其方式

解决办法:将 HorizontalAlignment.CENTER 替换 旧的即可
所在包:import org.apache.poi.ss.usermodel.HorizontalAlignment;
报错3:XSSFCellStyle.VERTICAL_CENTER

代码如下:

    //            cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);//垂直
                cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); //垂直

解决办法:将 VerticalAlignment.CENTER 替换 旧的即可
所在包:import org.apache.poi.ss.usermodel.VerticalAlignment;
报错4:Cell.CELL_TYPE_BLANK

代码如下:

        //Cell.CELL_TYPE_BLANK
        CellType.BLANK

解决办法:将 CellType.BLANK 替换 旧的即可
所在包:import org.apache.poi.ss.usermodel.CellType;
报错5:redFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);//粗体显示

代码如下:

    //        redFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);//粗体显示
            redFont.setBold(true);

解决办法:使用 setBold() 方法即可
报错6:CellStyle.SOLID_FOREGROUND

代码如下:

    //        cellStyle2.setFillPattern(CellStyle.SOLID_FOREGROUND);
            cellStyle2.setFillPattern(FillPatternType.SOLID_FOREGROUND);

解决办法:FillPatternType.SOLID_FOREGROUND
所在包:import org.apache.poi.ss.usermodel.FillPatternType;
报错7:switch. case. (HSSFCell.CELL_TYPE_STRING)

旧代码示例:

        int cType = fromCell.getCellType();
        switch (cType) {
        case HSSFCell.CELL_TYPE_STRING:
            break;
        case HSSFCell.CELL_TYPE_NUMERIC:
            break;
        case HSSFCell.CELL_TYPE_FORMULA:
            break;
        case HSSFCell.CELL_TYPE_BOOLEAN:
            break;
        case HSSFCell.CELL_TYPE_ERROR:
            break;
        default:
            break;
        }

改为新代码:

    CellType cType = fromCell.getCellType();
        switch (cType) {
        case STRING:
            break;
        case NUMERIC:
            break;
        case FORMULA:
            break;
        case BOOLEAN:
            break;
        case ERROR:
            break;
        default:
            break;
        }

报错8:anchor.setAnchorType(3);

报错代码:

             HSSFClientAnchor anchor = new HSSFClientAnchor(27,67,987,194,(short)col11,row1,(short) col22,row2);
            anchor.setAnchorType(3);

修改为: anchor.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE);
所在包:import org.apache.poi.ss.usermodel.ClientAnchor;

import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
报错9:Region

报错代码:

        Region region = null;
        region = fromsheet.getMergedRegionAt(0);
        if ((region.getRowFrom() >= firstrow)&& (region.getRowTo() <= lastrow)) {        
            region.setRowFrom(region.getRowFrom()+1);
            region.setRowTo(region.getRowTo()+1);        
            region.setColumnFrom((short) (region.getColumnFrom()+6));
            region.setColumnTo((short) (region.getColumnTo()+6));    
        }

解决办法:

        CellRangeAddress region = null;
        region = fromsheet.getMergedRegion(0);
        if ((region.getFirstRow() >= firstrow)&& (region.getLastRow() <= lastrow)) {            
            region.setFirstRow(region.getFirstRow()+1);
            region.setLastRow(region.getLastRow()+1);        
            region.setFirstColumn((short) (region.getFirstColumn()+6));
            region.setLastColumn((short) (region.getLastColumn()+6));    
        }

所在包名:import org.apache.poi.ss.util.CellRangeAddress;

报错10 new XSSFWorkbook();

报错内容:

    [java.lang.NoClassDefFoundError: org/apache/commons/io/output/UnsynchronizedByteArrayOutputStream]
     

内容分析:缺少这个UnsynchronizedByteArrayOutputStream.class

解决办法:升级jar 包
导入依赖如下:

           
                commons-io
                commons-io
                2.11.0
           

如果改了之后,还不行,又报错了

报错如下所示:

[java.lang.NoClassDefFoundError: org/apache/commons/collections4/ListValuedMap]

解决办法:升级jar 包
导入依赖如下:

           
                org.apache.commons
                commons-collections4
                4.1
           

改了还是报错:
报错如下:

    [java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager]

导入依赖:

            
                org.apache.logging.log4j
                log4j-api
                2.14.1
           

           
                org.apache.logging.log4j
                log4j-core
                2.14.1
           

还是报错,

报错如下: [java.lang.NoClassDefFoundError: org/apache/commons/compress/archivers/zip/ZipFile]
导入依赖:

            
                org.apache.commons
                commons-compress
            

报错如下: [java.lang.NoClassDefFoundError: org/apache/xmlbeans/impl/schema/DocumentFactory]

            
                org.apache.xmlbeans
                xmlbeans
                5.0.2
           


 

4、cell.getCellType过时

过时写法:
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC:
break;
case HSSFCell.CELL_TYPE_STRING:
break;
case HSSFCell.CELL_TYPE_FORMULA:
break;
case HSSFCell.CELL_TYPE_BLANK:
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
}

新写法:
//switch (cell.getCellTypeEnum()) { 3.17版本

switch (cell.getCellTypeEnum()) {//3.9以及5.23
case NUMERIC:
break;
case STRING:
break;
case FORMULA:
break;
case BLANK:
break;
case BOOLEAN:
break;
case ERROR:
break;
default:
break;
}
5、cell.setCellType(Cell.CELL_TYPE_STRING); 报错
用它替换就可以了。

引入:

import org.apache.poi.ss.usermodel.CellType;

cell.setCellType(CellType.STRING);

6、java.lang.IllegalArgumentException: Merged region I1 must contain 2 or more cells
问题分析:

1、合并单元格区域必须为2个或2个以上的单元格,一个单元格进行合并时会报错。

        /**
         * 设置合并单元格
         *
         * @param sheet            sheet页对象
         * @param startRowIndex    开始行号
         * @param endRowIndex      结束行号
         * @param startColumnIndex 开始列号
         * @param endColumnIndex   结束列号
         */
        public void setMergeCell(Sheet sheet, int startRowIndex, int endRowIndex, int startColumnIndex, int endColumnIndex) {
            //添加合并单元格区域
            CellRangeAddress cellRangeAddress = new CellRangeAddress(startRowIndex, endRowIndex, startColumnIndex, endColumnIndex);
            sheet.addMergedRegionUnsafe(cellRangeAddress);
        }

解决办法:

设置合并单元格之前先判断合并单元格区域是否只有一个单元格。

        /**
         * 设置合并单元格
         *
         * @param sheet            sheet页对象
         * @param startRowIndex    开始行号
         * @param endRowIndex      结束行号
         * @param startColumnIndex 开始列号
         * @param endColumnIndex   结束列号
         */
        public void setMergeCell(Sheet sheet, int startRowIndex, int endRowIndex, int startColumnIndex, int endColumnIndex) {
            //合并单元格区域只有一个单元格时,不合并
            if (endRowIndex == startRowIndex && endColumnIndex == startColumnIndex) {
                return;
            }
            //添加合并单元格区域
            CellRangeAddress cellRangeAddress = new CellRangeAddress(startRowIndex, endRowIndex, startColumnIndex, endColumnIndex);
            sheet.addMergedRegionUnsafe(cellRangeAddress);
        }

原文链接:https://blog.csdn.net/qq_38974638/article/details/11658888

你可能感兴趣的:(WEB,excel模版导出,excel)