【示例】SpringBoot读取Excel

ExcelController

java 复制代码
    @PostMapping("/dev/readExcel")
    public List<Map<String, Object>> readExcel(@RequestParam("cellHeader") String cellHeader, @RequestParam("file") MultipartFile file) {
        if (StringUtils.isEmpty(cellHeader)) {
            logger.info("列信息为空");
            return new ArrayList<>();
        }
        JSONArray cellHeaderInfoArray = JSONArray.parseArray(cellHeader);
        return ExcelUtil.readExcel(file, cellHeaderInfoArray);
    }

ExcelUtil

java 复制代码
public class ExcelUtil {

    private static Workbook getWorkbook(MultipartFile file) {
        Workbook workbook = null;
        try {
            String suffix = getFileSuffix(file);
            if ("xls".equals(suffix)) {
                workbook = new HSSFWorkbook(file.getInputStream());
            } else {
                workbook = new XSSFWorkbook(file.getInputStream());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return workbook;
    }

    public static List<String> getCellFileIdList(JSONArray cellHeaderInfoArray) {
        List<String> fileIdList = new ArrayList<>();
        JSONObject cellHeaderInfo;
        for (int i = 0; i < cellHeaderInfoArray.size(); i++) {
            cellHeaderInfo = cellHeaderInfoArray.getJSONObject(i);
            fileIdList.add(cellHeaderInfo.getString("fileId"));
        }
        return fileIdList;
    }

    public static List<String> getCellFileNameList(JSONArray cellHeaderInfoArray) {
        List<String> fileNameList = new ArrayList<>();
        JSONObject cellHeaderInfo;
        for (int i = 0; i < cellHeaderInfoArray.size(); i++) {
            cellHeaderInfo = cellHeaderInfoArray.getJSONObject(i);
            fileNameList.add(cellHeaderInfo.getString("fileName"));
        }
        return fileNameList;
    }


    public static List<Map<String, Object>> readExcel(MultipartFile file,  JSONArray cellHeaderInfoArray) {
        List<Map<String, Object>> list = new ArrayList<>();
        List<String> fileIdList;
        Workbook workbook = null;
        Sheet sheet = null;
        int firstRowNum, lastRowNum, cellNum;
        Row row;
        Cell cell;
        String fileId;
        //创建Excel,读取文件内容
        try {
            workbook = getWorkbook(file);
            //获取第一个工作表
            sheet = workbook.getSheetAt(0);
            //获取sheet中第一行行号(首行是0)
            firstRowNum = sheet.getFirstRowNum();
            //获取sheet中最后一行行号
            lastRowNum = sheet.getLastRowNum();
            //循环插入数据
            Map<String, Object> rowMap;
            fileIdList = getCellFileIdList(cellHeaderInfoArray);
            for (int i = firstRowNum + 1; i <= lastRowNum; i++) {
                rowMap = new HashMap<>();
                row = sheet.getRow(i);
                // 列数从1开始(只有一列有数据时,返回1)
                cellNum = row.getLastCellNum();
                if (cellNum > fileIdList.size()) {
                    cellNum = fileIdList.size();
                }
                for (int j = 0; j < cellNum; j++) {
                    cell = row.getCell(i);
                    fileId = fileIdList.get(0);
                    if (cell != null) {
                        if (cell.getCellType().equals(CellType.STRING)) {
                            rowMap.put(fileId, cell.getStringCellValue());
                        } else if (cell.getCellType().equals(CellType.NUMERIC)) {
                            rowMap.put(fileId, cell.getNumericCellValue());
                        } else {
                            rowMap.put(fileId, cell.getStringCellValue());
                        }
                    } else {
                        rowMap.put(fileId, "");
                    }
                }
                list.add(rowMap);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                file.getInputStream().close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return list;
    }

    private static String getFileSuffix(MultipartFile file) {
        String originalFilename = file.getOriginalFilename(); // 原始文件名(包含后缀)
        if (StringUtils.isEmpty(originalFilename)) {
            return "";
        }
        int index = originalFilename.lastIndexOf('.'); // 最后一个点号的索引位置
        if (index != -1 && index < originalFilename.length() - 1) {
            return originalFilename.substring(index + 1); // 提取后缀部分
        } else {
            return "";
        }
    }
}
相关推荐
代码之光_198013 分钟前
保障性住房管理:SpringBoot技术优势分析
java·spring boot·后端
ajsbxi18 分钟前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
一名技术极客1 小时前
Vue2 doc、excel、pdf、ppt、txt、图片以及视频等在线预览
pdf·powerpoint·excel·文件在线预览
颜淡慕潇1 小时前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
用余生去守护1 小时前
【反射率】-- Lab 转换(excel)
excel
进击的六角龙1 小时前
Python中处理Excel的基本概念(如工作簿、工作表等)
开发语言·python·excel
TracyDemo1 小时前
excel功能
excel
lc寒曦1 小时前
【VBA实战】用Excel制作排序算法动画
排序算法·excel·vba
zzzgd8161 小时前
easyexcel实现自定义的策略类, 最后追加错误提示列, 自适应列宽,自动合并重复单元格, 美化表头
java·excel·表格·easyexcel·导入导出
努力学习技能的LY1 小时前
Excel:vba实现批量插入图片批注
excel