首页 > 编程语言 >java处理excel文件

java处理excel文件

时间:2024-11-15 14:20:04浏览次数:3  
标签:文件 java String excel cell result org workbook import

文章目录

maven引入依赖

<!--处理excel依赖-->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.9</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.9</version>
</dependency>

编写ExcelUtil工具类

package com.rc.rc_exam.utils;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ExcelUtil {

    private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class);

    public static List<Map<String, String>> readExcel(String path){
        try {
            FileInputStream inputStream = new FileInputStream(path);
            Workbook workbook = null;
            if (path.endsWith(".xlsx")) {
                workbook = new XSSFWorkbook(inputStream);
            } else {
                workbook = new HSSFWorkbook(inputStream);
            }
            return getExcelResultList(workbook);
        }catch (Exception e){
            log.error(e.getMessage());
        }
        return null;
    }

    public static List<Map<String, String>> readExcel(MultipartFile file){
        try {
            Workbook workbook = WorkbookFactory.create(file.getInputStream());
            return getExcelResultList(workbook);
        }catch (Exception e){
            log.error(e.getMessage());
        }
        return null;
    }

    private static List<Map<String, String>> getExcelResultList(Workbook workbook) {
        List<Map<String,String>> resultList = new ArrayList<>();
        //获取第一个sheet
        Sheet sheet = workbook.getSheetAt(0);
        //获取第一行数据
        Row row = sheet.getRow(0);
        //获取有效单元格数量
        int colNum = row.getPhysicalNumberOfCells();
        Map<Integer,String> headLineMap = new HashMap<>();
        //处理第一行数据
        for (int i = 0; i < colNum; i++) {
            Cell cell = row.getCell(i);
            //每一列第一行的标题
            String stringCellValue = cell.getStringCellValue();
            headLineMap.put(i,stringCellValue);
        }
        Map<String,String> resultMap = null;
        //处理第二行之后的数据
        int rowNum = sheet.getPhysicalNumberOfRows();
        for (int i = 1; i < rowNum; i++) {
            resultMap = new HashMap<>();
            Row row1 = sheet.getRow(i);
            int physicalNumberOfCells1 = row1.getPhysicalNumberOfCells();
            for (int i1 = 0; i1 < physicalNumberOfCells1; i1++) {
                Cell cell = row1.getCell(i1);
                String cellValue = null;
                if (cell!=null){
                    cellValue = handleCellValue(cell, workbook);
                }
                resultMap.put(headLineMap.get(i1),cellValue);
            }
            resultList.add(resultMap);
        }
        return resultList;
    }

    private static String handleCellValue(Cell cell, Workbook workbook) {
        String result = "";
        int cellType = cell.getCellType();
        switch (cellType){
            case XSSFCell.CELL_TYPE_STRING:
                result = cell.getStringCellValue();
                break;
            case XSSFCell.CELL_TYPE_BLANK:
                result = "";
                break;
            case XSSFCell.CELL_TYPE_BOOLEAN:
                result = String.valueOf(cell.getBooleanCellValue());
                break;
            case XSSFCell.CELL_TYPE_FORMULA:
                FormulaEvaluator formulaEvaluator = new XSSFFormulaEvaluator((XSSFWorkbook) workbook);
                //获得计算公式
                String cellFormula = cell.getCellFormula();
                CellValue evaluate = formulaEvaluator.evaluate(cell);
                result = evaluate.formatAsString();
                break;
            case XSSFCell.CELL_TYPE_NUMERIC:
                if (HSSFDateUtil.isCellDateFormatted(cell)){
                    result = String.valueOf(cell.getDateCellValue());
                }else {
                    cell.setCellType(XSSFCell.CELL_TYPE_STRING);
                    result = cell.getStringCellValue();
                }
                break;
            case XSSFCell.CELL_TYPE_ERROR:
                result = "";
                break;
        }
        return result;
    }

    public static void main(String[] args) {
        String path = "D:\\01wangcheng\\excelExam\\N1题库.xls";
        List<Map<String, String>> resultList = readExcel(path);
        System.out.println(resultList);
    }
}

使用ExcelUtil工具类

 /**
     * 上传试题excel
     * @param file
     * @return
     */
    @PostMapping("uploadExamExcel")
    @ApiOperation("上传试题excel")
    public Result uploadExamExcel(@RequestParam("file") MultipartFile file){
        String result = rcExamService.createRcExamDataByExcel(file);
        return Result.ok(result);
    }

标签:文件,java,String,excel,cell,result,org,workbook,import
From: https://blog.csdn.net/weixin_45146962/article/details/143758033

相关文章

  • Java虚拟机(JVM):Java程序的心脏
    Java虚拟机(JavaVirtualMachine,JVM)是Java运行时环境的核心组件,它不仅为Java程序提供了跨平台的能力,还负责内存管理、类加载、字节码解释与执行等重要功能。本文将深入探讨JVM的架构、内存划分、工作原理以及性能调优等方面的内容,帮助读者全面理解这一关键技术。一、JVM的架构......
  • Java集合框架之Collection集合遍历
    引言在Java编程中,集合(Collection)框架是处理对象集合的核心工具。它提供了一套统一的接口和类来存储和操作对象集合。遍历集合是日常开发中的一项基本任务,本文将深入探讨JavaCollection集合的遍历方法,并提供实际的代码示例。JavaCollection框架概览JavaCollection框架主要......
  • 最全JAVA面试八股文,终于整理完了
    1、Java线程具有五中基本状态(1)新建状态(New):当线程对象对创建后,即进入了新建状态,如:Threadt=newMyThread();(2)就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是......
  • java请求频次控制
    1、添加工具类importjava.util.concurrent.atomic.AtomicInteger;/***频次调用控制类*/publicclassRateLimiterUtil{privatefinalAtomicIntegersum;privatefinalintmaxRequests;privatelongperiod=1000;//1秒privatelonglastTime......
  • 2024 年 Java 面试最全攻略:程序员求职跳槽必刷题目 1000+,横扫一切技术盲点!
    写在前面马上又要到收割Offer的季节,你准备好了吗?曾经的我,横扫各个大厂的Offer。还是那句话:进大厂临时抱佛脚是肯定不行的,一定要注重平时的总结和积累,多思考,多积累,多总结,多复盘,将工作经历真正转化为自己的工作经验。面经分享今天给大家分享一个面试大厂的完整面经,小伙......
  • 如何准备Java面试?
    今年招聘高峰期已过,不知道大家都找到工作没有。反正我最近是收到很多粉丝的私信说自己投了简历却杳无音信,在第一关就败下阵来。言归正传出现这一情况要么就是你的简历没有修饰好,要么就是你简历上掌握的技术栈还不足以满足你投的岗位的需求,当然后者是需要平时积累。一般像我们......
  • Visual Studio 快速分析 .NET Dump 文件
    前言在开发和维护.NET应用程序的过程中,有时会遇到难以捉摸的性能瓶颈或内存泄漏等问题。这些问题往往发生在生产环境中,难以复现。为了更准确地诊断这些运行时问题,通常会收集应用程序在生产环境中的内存转储文件(.dump文件)。在这种情况下,分析内存转储文件(.dump文件)成为解决问题......
  • 使用model-viewer加载glb文件
    实现效果代码react项目引入方式可选其一1.在html中引入<scripttype="module"src="https://unpkg.com/@google/model-viewer/dist/model-viewer.min.js"></script>npm或者yarn安装yarnadd@google/model-viewerindex.jsimportReact,{useStat......
  • 基于Java的医院病历管理系统
    医院病历管理系统一:基本介绍开发环境功能模块图系统功能部分数据库表设计二:部分系统页面展示登录页面管理员首页管理员对病人信息管理界面管理员对医生信息管理界面管理员对科室信息管理界面管理员对住院信息管理界面医生管理自己的病人信息界面医生管理病人住院信息界......
  • 基于Java的社区物业管理系统
    社区物业管理系统一:基本介绍开发环境功能模块图系统功能系统功能分析部分数据库表设计系统总体E-R图二:部分系统页面展示登录页面用户车位管理界面用户租住信息管理界面用户收费信息管理界面用户房产信息管理界面管理员用户管理界面管理员收费类型管理界面管理员收费信息......