解析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;
    }
相关推荐
badhope15 分钟前
Mobile-Skills:移动端技能可视化的创新实践
开发语言·人工智能·git·智能手机·github
码云数智-园园1 小时前
微服务架构下的分布式事务:在一致性与可用性之间寻找平衡
开发语言
C++ 老炮儿的技术栈2 小时前
volatile使用场景
linux·服务器·c语言·开发语言·c++
hz_zhangrl2 小时前
CCF-GESP 等级考试 2026年3月认证C++一级真题解析
开发语言·c++·gesp·gesp2026年3月·gespc++一级
大阿明2 小时前
Spring Boot(快速上手)
java·spring boot·后端
Liu628882 小时前
C++中的工厂模式高级应用
开发语言·c++·算法
bearpping2 小时前
Java进阶,时间与日期,包装类,正则表达式
java
IT猿手2 小时前
基于控制障碍函数的多无人机编队动态避障控制方法研究,MATLAB代码
开发语言·matlab·无人机·openclaw·多无人机动态避障路径规划·无人机编队
邵奈一2 小时前
清明纪念·时光信笺——项目运行指南
java·实战·项目
AI科技星2 小时前
全尺度角速度统一:基于 v ≡ c 的纯推导与验证
c语言·开发语言·人工智能·opencv·算法·机器学习·数据挖掘