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 包
导入依赖如下:
如果改了之后,还不行,又报错了
报错如下所示:
[java.lang.NoClassDefFoundError: org/apache/commons/collections4/ListValuedMap]
解决办法:升级jar 包
导入依赖如下:
改了还是报错:
报错如下:
[java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager]
导入依赖:
还是报错,
报错如下: [java.lang.NoClassDefFoundError: org/apache/commons/compress/archivers/zip/ZipFile]
导入依赖:
报错如下: [java.lang.NoClassDefFoundError: org/apache/xmlbeans/impl/schema/DocumentFactory]
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