使用poi完成execl上传

本文详细介绍了如何使用Java和Apache POI库处理MultipartFile类型的Excel文件上传,包括将文件转换为字节数组、在本地创建File文件并进行读写操作,以及如何使用POI库读取Excel文件的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所需依赖

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.17</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.17</version>
		</dependency>

java后台代码

public String uploadExcel(MultipartFile file){
		//判断是否为空
        if (file.isEmpty()) {
            System.out.println("文件为空");
        }
        //获取MultipartFile 文件名
        String mFileName = file.getOriginalFilename();
        //获取文件后缀名
        String endName  = mFileName.substring(mFileName.lastIndexOf(".")+1);
        
        if(!endName.endsWith("xlsx") && !endName.endsWith("xls")){
            System.out.println("请传入正确的Excel格式文件!");
        }
        try {
        	//poi需要的是File格式的输入流,需要先将MultipartFile转为File
            //上传文件存放到本地
            Date now = new Date();
            String fileName = file.getOriginalFilename();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// 小写的mm表示的是分钟
            String dateStr = sdf.format(now);
            String path = dateStr;// request.getSourceUrl();
            logger.info("save path:" + path);
            //获得MultipartFile的输入流
            InputStream in = file.getInputStream();
            byte[] bytes = new byte[in.available()];
            // 将MultipartFile 文件中的内容读入到数组中
            in.read(bytes);
            // 文件保存位置
            File saveDir = new File(path);
            if (!saveDir.exists()) {
                saveDir.mkdir();
            }
            File savefile = new File(saveDir + File.separator + fileName);
            FileOutputStream fos = new FileOutputStream(savefile);
            //将MultipartFile的输入流写入新创建的File文件中
            fos.write(bytes);
            if (fos != null) {
                fos.close();
            }
            in.close();
            FileInputStream stream = new FileInputStream(savefile);
            //获得execl文件输入流
            InputStream inputStream = file.getInputStream();
            //获得Execl文件
            Workbook wb = WorkbookFactory.create(stream);
            //获取第一个工作表
            Sheet readSheet = wb.getSheetAt(0);
            遍历工作表
            for (Row row : readSheet) {
                //省略execl第一行,第一行一般为格列的标题
                if(row.getRowNum()==0){
                    continue;
                }
                //获取文本
                String  = row.getCell(4).getStringCellValue();
                //获取数字类型的列
                double money = row.getCell(10).getNumericCellValue();
                BigDecimal totalAchievement = new BigDecimal(money);
				//获取时间类型的列,需要转换
                double time = row.getCell(6).getNumericCellValue();
                Date date = DateUtil.getJavaDate(time);
            }
           
        }catch (Exception e){
        }
      
    }

上面的方法流程是:首先将MultipartFile文件转换为字节数组,然后在本地新建一个File文件,再将字节数组写入file文件中,在使用poi操作file文件。

下面这种方法是网上查找到的
multipartFile就是MultipartFile类型的文件

CommonsMultipartFile commonsMultipartFile = (CommonsMultipartFile) multipartFile;
FileItem fileItem = commonsMultipartFile.getFileItem();
DiskFileItem diskFileItem = (DiskFileItem) fileItem;
String absPath = diskFileItem.getStoreLocation().getAbsolutePath();
File file = new File(absPath);

但是这种方法,测试的时候会报错,暂时没有使用这个方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值