解析Excel文件数据,切分成多张excel并上传minio

后台代码:

1.首页解析excel数据为实体类,

java 复制代码
		List<DataCMMInfoExcel> list = new ArrayList<>();
        try {
            DefaultExcelListener readListener = new DefaultExcelListener(false);
            EasyExcel.read(file.getInputStream(), DataCMMInfoExcel.class, readListener).sheet().headRowNumber(14).doRead();
            list = readListener.getExcelResult().getList();
        } catch (IOException e) {
            e.printStackTrace();
            throw new ServiceException("读取excel文件出现异常");
        }

2.使用方法计算要切分成的excel数量

java 复制代码
//统计excel个数
        int productNo = getCountNum(list);

3.循坏遍历解析数据

java 复制代码
		//原文件名称
        String originalFileName = file.getOriginalFilename();

        //数据解析-遍历产品
        for (int i = 0; i < productNo; i++) {
            String oldFileName = StringUtils.substring(originalFileName, 0, originalFileName.lastIndexOf("."));
            String suffix = StringUtils.substring(originalFileName, originalFileName.lastIndexOf("."), originalFileName.length());
            //当前产品的文件名
            String fileName = oldFileName + "_" + (i+1) + suffix;
            String fileFullPath =  fileName;
            // 生成excel文件
            OutputStream outputSteam = null;
            try{
                File newFile = new File(fileFullPath);
                if (!newFile .getParentFile().exists()) {
                    newFile .getParentFile().mkdirs();
                }
                if(!newFile .exists()) {
                    newFile .createNewFile();
                }
                outputSteam = new FileOutputStream(newFile);
                //报表
                String[] fields = {"检测项", "标准值", "测量值"};
                SXSSFWorkbook wb = exportExcel(list,fields,i+1);
                wb.write(outputSteam);
                outputSteam.flush();
                outputSteam.close();

                //上传excel到minio
                OssClient ossClient = OssFactory.instance();
                UploadResult uploadResult;
                try {
                    uploadResult = ossClient.uploadSuffix(FileUtil.readBytes(newFile), FileUtil.getSuffix(fileName), FileUtil.getType(newFile));
                } catch (Exception e) {
                    e.printStackTrace();
                    throw new ServiceException("上传minio出错");
                }
                
                //删除文件
                if (newFile.exists() && newFile.isFile()) {
                    if (newFile.delete()) {
                        log.info("删除excel文件名称:{}", fileName);
                    }
                }

            }catch (Exception e){
                throw new ServiceException("生成表格出现异常!");
            }
        }

4.生成excel表格方法

java 复制代码
private SXSSFWorkbook exportExcel(List<DataInfoExcel> excelList, String[] fields, int productNo) {
        SXSSFWorkbook wb = new SXSSFWorkbook();
        Sheet sheet = wb.createSheet("Data");

        // 生成一个样式
        CellStyle style = wb.createCellStyle();
        //设置边框居中
        style.setAlignment(HorizontalAlignment.CENTER);
        // 设置字体
        Font font = wb.createFont();
        font.setFontName("仿宋_GB2312");
        font.setColor(IndexedColors.OLIVE_GREEN.index);
        // 把字体应用到当前的样式
        style.setFont(font);

        //生成第一行
        Row row = sheet.createRow(0);
        for (int k = 0; k < fields.length; k++) {
            Cell cell1 = row.createCell(k);
            cell1.setCellValue(fields[k]);
            cell1.setCellStyle(style);
            sheet.setColumnWidth(k, fields[k].getBytes().length * 2 * 256);
        }

        //数据列表展示
        for (int i = 0; i < excelList.size(); i++) {
            DataInfoExcel infoExcel = excelList.get(i);
            //index表示起始写入位置
            row = sheet.createRow(1 + i);
            //检测项
            row.createCell(0).setCellValue(infoExcel.getName());
            //标准值
            row.createCell(1).setCellValue(infoExcel.getStand());
            //测量值
            if(productNo == 1){
                row.createCell(2).setCellValue(infoExcel.getProduct1());
            }else if(productNo == 2){
                row.createCell(2).setCellValue(infoExcel.getProduct2());
            }else if(productNo == 3){
                row.createCell(2).setCellValue(infoExcel.getProduct3());
            }
        }
        return wb;
    }
相关推荐
それども8 小时前
Excel文件解析 - SAX startRow cell endRow 执行时机
java·excel
Z9fish8 小时前
sse哈工大C语言编程练习22
c语言·开发语言·算法
小二·8 小时前
Go 语言系统编程与云原生开发实战(第12篇)云原生部署实战:Helm Chart × GitOps × 多环境管理(生产级落地)
开发语言·云原生·golang
小二·8 小时前
Go 语言系统编程与云原生开发实战(第13篇)工程效能实战:Monorepo × 依赖治理 × 构建加速(10万行代码实测)
开发语言·云原生·golang
暴躁小师兄数据学院8 小时前
【WEB3.0零基础转行笔记】Golang编程篇-第4讲:Go语言中的流程控制
开发语言·后端·golang·web3·区块链
j445566118 小时前
C++中的备忘录模式
开发语言·c++·算法
椎4958 小时前
java微服务01-快速入门、mybatisplus
java·微服务
为什么不问问神奇的海螺呢丶8 小时前
n9e categraf k8s监控配置-n9e k8s监控看板
java·容器·kubernetes
代码无bug抓狂人8 小时前
C语言之产值调整(蓝桥杯省B)
c语言·开发语言·蓝桥杯
云和数据.ChenGuang8 小时前
python 面向对象基础入门
开发语言·前端·python·django·flask