poiHelper工具类

private ArrayList<ImportIndicatorRowDataDto> validFileAndConvertData(MultipartFile file) throws IOException {
        InputStream fileInputStream = file.getInputStream();
        if (file.isEmpty()) {
            throw new DomainArgumentException("上传文件不能为空");
        }
        String fileName = file.getOriginalFilename();
        assert fileName != null;
        String fileSuffix = fileName.substring(fileName.lastIndexOf(".") + 1);
        if (!"xls".equalsIgnoreCase(fileSuffix) && !"xlsx".equalsIgnoreCase(fileSuffix)) {
            throw new DomainArgumentException("文件格式错误");
        }

        ExcelOutPut excelOutPut = null;
        if ("xlsx".equals(fileSuffix)) {
            excelOutPut = PoiHelper.readXlsx(fileInputStream);
        } else if ("xls".equals(fileSuffix)) {
            excelOutPut = PoiHelper.readXls(fileInputStream);
        }
        if (excelOutPut == null || excelOutPut.getTitleList() == null) {
            throw new DomainArgumentException("导入文件模板错误");
        }

        int rowNumber = 1;
        ArrayList<ImportIndicatorRowDataDto> dataList = new ArrayList<>();
        if (ObjectUtils.isNotEmpty(excelOutPut.getDataList())) {
            for (ArrayList<String> rowData : excelOutPut.getDataList()) {
                //行数据空时跳过
                if (rowData.get(0).isEmpty() && rowData.get(1).isEmpty()) {
                    continue;
                }

                int colNum = 0;
                ImportIndicatorRowDataDto indicatorRowDataDto = new ImportIndicatorRowDataDto();
                indicatorRowDataDto.setRowNumber(rowNumber);
                indicatorRowDataDto.setIndicatorSystemNo(rowData.get(colNum++).trim());
                indicatorRowDataDto.setIndicatorName(rowData.get(colNum++).trim());
                dataList.add(indicatorRowDataDto);
                rowNumber++;
            }
        }
        return dataList;
    }

工具类

public class PoiHelper {
    public static ExcelOutPut readXlsx(InputStream io) throws IOException {
        var dataList = new ArrayList<ArrayList<String>>();
        var titleList = new ArrayList<String>();
        var xssfWorkbook = new XSSFWorkbook(io);
        var xssfSheet = xssfWorkbook.getSheetAt(0);

        var rowStart = xssfSheet.getFirstRowNum();
        var rowEnd = xssfSheet.getLastRowNum();

        // 分离excel第一行
        var row1 = xssfSheet.getRow(rowStart);
        if (row1 == null) {
            xssfWorkbook.close();
            return null;
        }
        var cellStart1 = row1.getFirstCellNum();
        var cellEnd1 = row1.getLastCellNum();
        for (var k = cellStart1; k <= cellEnd1; k++) {
            var cell = row1.getCell(k);
            if (cell != null && !cell.toString().isEmpty()) {
                titleList.add(cell.toString());
            }
        }

        for (var i = rowStart + 1; i <= rowEnd; i++) {
            var row = xssfSheet.getRow(i);
            if (row == null) {
                continue;
            }
            var cellStart = 0;
            var cellEnd = row.getPhysicalNumberOfCells();
            if (cellEnd < 0) {
                continue;
            }
            var arrayList = new ArrayList<String>();
            for (var k = cellStart; k < titleList.size(); k++) {
                var cell = row.getCell(k);
                if (cell == null) {
                    arrayList.add("");
                } else {
                    switch (cell.getCellTypeEnum()) {
                        // 数字
                        case NUMERIC:
                            if (HSSFDateUtil.isCellDateFormatted(cell)) {
                                var date = cell.getDateCellValue();
                                var formater = new SimpleDateFormat("yyyy-MM-dd");
                                arrayList.add(formater.format(date));
                            } else {
                                arrayList.add(NumberToTextConverter.toText(cell.getNumericCellValue()));
                            }
                            break;
                        // 字符串
                        case STRING:
                            arrayList.add(cell.getStringCellValue());
                            break;
                        // Boolean
                        case BOOLEAN:
                            arrayList.add(String.valueOf(cell.getBooleanCellValue()));
                            break;
                        // 公式
                        case FORMULA:
                            arrayList.add(cell.getCellFormula());
                            break;
                        // 空值
                        case BLANK:
                            arrayList.add("");
                            break;
                        // 故障
                        case ERROR:
                            arrayList.add("");
                            break;
                        default:
                            arrayList.add("");
                            break;
                    }

                }
            }
            dataList.add(arrayList);
        }
        var excelOutPut = new ExcelOutPut(titleList, dataList);
        xssfWorkbook.close();
        io.close();
        return excelOutPut;
    }

    public static ExcelOutPut readXls(InputStream io) throws IOException {
        var dataList = new ArrayList<ArrayList<String>>();
        var titleList = new ArrayList<String>();
        var hssfWorkbook = new HSSFWorkbook(io);
        var hssfSheet = hssfWorkbook.getSheetAt(0);

        var rowStart = hssfSheet.getFirstRowNum();
        var rowEnd = hssfSheet.getLastRowNum();

        // 分离excel第一行
        var row1 = hssfSheet.getRow(rowStart);
        if (null == row1) {
            hssfWorkbook.close();
            return null;
        }
        var cellStart1 = row1.getFirstCellNum();
        var cellEnd1 = row1.getLastCellNum();
        for (int k = cellStart1; k <= cellEnd1; k++) {
            HSSFCell cell = row1.getCell(k);
            if (null != cell && !cell.toString().isEmpty()) {
                titleList.add(cell.toString());
            }
        }

        for (var i = rowStart + 1; i <= rowEnd; i++) {
            HSSFRow row = hssfSheet.getRow(i);
            if (row == null) {
                continue;
            }
            int cellStart = 0;
            int cellEnd = row.getPhysicalNumberOfCells();
            if (cellEnd < 0) {
                continue;
            }
            var arrayList = new ArrayList<String>();
            for (var k = cellStart; k < titleList.size(); k++) {
                var cell = row.getCell(k);
                if (cell == null) {
                    arrayList.add("");
                } else {
                    switch (cell.getCellTypeEnum()) {
                        // 数字
                        case NUMERIC:
                            if (HSSFDateUtil.isCellDateFormatted(cell)) {
                                var date = cell.getDateCellValue();
                                var formater = new SimpleDateFormat("yyyy-MM-dd");
                                arrayList.add(formater.format(date));
                            } else {
                                arrayList.add(NumberToTextConverter.toText(cell.getNumericCellValue()));
                            }
                            break;
                        // 字符串
                        case STRING:
                            arrayList.add(cell.getStringCellValue());
                            break;
                        // Boolean
                        case BOOLEAN:
                            arrayList.add(String.valueOf(cell.getBooleanCellValue()));
                            break;
                        // 公式
                        case FORMULA:
                            arrayList.add(cell.getCellFormula());
                            break;
                        // 空值
                        case BLANK:
                            arrayList.add("");
                            break;
                        // 故障
                        case ERROR:
                            arrayList.add("");
                            break;
                        default:
                            arrayList.add("");
                            break;
                    }
                }
            }
            dataList.add(arrayList);
        }
        var excelOutPut = new ExcelOutPut(titleList, dataList);
        hssfWorkbook.close();
        return excelOutPut;
    }

    public static ExcelOutPut readXlsxWithSheets(InputStream io,int sheet) throws IOException {
        var dataList = new ArrayList<ArrayList<String>>();
        var titleList = new ArrayList<String>();
        var xssfWorkbook = new XSSFWorkbook(io);

        var xssfSheet = xssfWorkbook.getSheetAt(sheet);

        var rowStart = xssfSheet.getFirstRowNum();
        var rowEnd = xssfSheet.getLastRowNum();

        // 分离excel第一行
        var row1 = xssfSheet.getRow(rowStart);
        if (row1 == null) {
            xssfWorkbook.close();
            return null;
        }
        var cellStart1 = row1.getFirstCellNum();
        var cellEnd1 = row1.getLastCellNum();
        for (var k = cellStart1; k <= cellEnd1; k++) {
            var cell = row1.getCell(k);
            if (cell != null && !cell.toString().isEmpty()) {
                titleList.add(cell.toString());
            }
        }

        for (var i = rowStart + 1; i <= rowEnd; i++) {
            var row = xssfSheet.getRow(i);
            if (row == null) {
                continue;
            }
            var cellStart = 0;
            var cellEnd = row.getPhysicalNumberOfCells();
            if (cellEnd < 0) {
                continue;
            }
            var arrayList = new ArrayList<String>();
            for (var k = cellStart; k < titleList.size(); k++) {
                var cell = row.getCell(k);
                if (cell == null) {
                    arrayList.add("");
                } else {
                    switch (cell.getCellTypeEnum()) {
                        // 数字
                        case NUMERIC:
                            if (HSSFDateUtil.isCellDateFormatted(cell)) {
                                var date = cell.getDateCellValue();
                                var formater = new SimpleDateFormat("yyyy-MM-dd");
                                arrayList.add(formater.format(date));
                            } else {
                                arrayList.add(NumberToTextConverter.toText(cell.getNumericCellValue()));
                            }
                            break;
                        // 字符串
                        case STRING:
                            arrayList.add(cell.getStringCellValue());
                            break;
                        // Boolean
                        case BOOLEAN:
                            arrayList.add(String.valueOf(cell.getBooleanCellValue()));
                            break;
                        // 公式
                        case FORMULA:
                            arrayList.add(cell.getCellFormula());
                            break;
                        // 空值
                        case BLANK:
                            arrayList.add("");
                            break;
                        // 故障
                        case ERROR:
                            arrayList.add("");
                            break;
                        default:
                            arrayList.add("");
                            break;
                    }

                }
            }
            dataList.add(arrayList);
        }
        var excelOutPut = new ExcelOutPut(titleList, dataList);
        xssfWorkbook.close();
        io.close();
        return excelOutPut;
    }

}

接受转换后的实体,一个是表头集合,一个是数据集合

@Data
@AllArgsConstructor
public class ExcelOutPut {
    private ArrayList<String> titleList;
    private ArrayList<ArrayList<String>> dataList;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值