解析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;
    }
相关推荐
栈溢出了13 分钟前
Redis 分片集群与哈希槽笔记
java·redis·笔记·spring
遨游DATA22 分钟前
Spring Boot 启动失败排查:如何区分多 Bean 冲突与清理阶段异常
java·spring boot·后端
从零开始的代码生活_1 小时前
C++ 内存管理:从内存分区到 new/delete 底层原理
开发语言·c++·后端
wabs6661 小时前
关于单调栈【力扣739.每日温度的思考】
java·开发语言
AOwhisky1 小时前
Python 学习笔记(第三期)——流程控制核心知识点自测与详解
开发语言·笔记·python·学习·云原生·运维开发·流程控制
雪碧聊技术1 小时前
为什么要学函数式编程?
java·函数式编程
aaPIXa6222 小时前
C++ 用 13 条规则让模型写出安全现代 C++
java·c++·安全
逆向编程2 小时前
Socket异常连接自动清理方案
开发语言
2601_949817723 小时前
C++指针与引用深度精讲:底层原理、差异对比与高阶实战陷阱
java·jvm·c++
va学弟3 小时前
Java 网络通信编程(10):Channel 和 Selector
java·开发语言