spring boot 将前端传入的MultipartFile转换成inputStream并使用poi读取内部数据

本文介绍如何在SpringBoot项目中使用Apache POI库处理前端上传的Excel文件,包括将MultipartFile转换为InputStream,并读取Excel数据,提供两种实现方式的代码示例。

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

spring boot 将前端传入的MultipartFile转换成inputStream并使用poi读取内部数据

下面是使用poi插件的依赖

<dependency>
		<groupId>org.apache.poi</groupId>
		<artifactId>poi-ooxml</artifactId>
		<version>3.9</version>
	</dependency>

这个看起来东西好像代码多了些(完善)


	@RequestMapping(value = "/excel", method = RequestMethod.POST)
	public String loadExcel(MultipartFile file, HttpServletRequest request)throws IOException {
	
//	InputStream ips = new FileInputStream("C:\\Users\\Xuliangyong\\Desktop\\aaa.xls");
//	InputStream ips = new FileInputStream(file2);
		//multipartfile转换成inputstream
	InputStream ips = null;
	File file1 = null;
	file1 = File.createTempFile("temp", null);
	file.transferTo(file1);
	ips =new FileInputStream(file1);
	file1.deleteOnExit();
	//-------------------------------读取excel第一行  如何想读取全部excel就再加一重for循环
    HSSFWorkbook wb = new HSSFWorkbook(ips);
    HSSFSheet sheet = wb.getSheetAt(0);
    Iterator ite = sheet.rowIterator(); 
        HSSFRow row = (HSSFRow) ite.next();
        System.out.println("");
        for (Iterator itet = row.cellIterator(); itet.hasNext(); ) {
            HSSFCell cell = (HSSFCell) itet.next();
            switch (cell.getCellType()) {
                case HSSFCell.CELL_TYPE_BOOLEAN:
                    //得到Boolean对象的方法
                    System.out.print(cell.getBooleanCellValue() + " ");
                    break;
                case HSSFCell.CELL_TYPE_NUMERIC:
                    //先看是否是日期格式
                    if (HSSFDateUtil.isCellDateFormatted(cell)) {
                        //读取日期格式
                        System.out.print(cell.getDateCellValue() + " ");
                    } else {
                        //读取数字
                        System.out.print(cell.getNumericCellValue() + " ");
                    }
                    break;
                case HSSFCell.CELL_TYPE_FORMULA:
                    //读取公式
                    System.out.print(cell.getCellFormula() + " ");
                    break;
                case HSSFCell.CELL_TYPE_STRING:
                    //读取String
                    System.out.print(cell.getRichStringCellValue().toString() + " ");
                    break;
            
        }
    }

		
		return "aa";
	}
	

简写

@RequestMapping(value = "/insertData", method = RequestMethod.POST)
			public void excelLoad(MultipartFile uploadFile, HttpServletRequest request) throws IOException {
			
				List<String> dataList = new ArrayList<String>();
				InputStream ips = null;
				File file1 = null;
				file1 = File.createTempFile("temp", null);
				uploadFile.transferTo(file1);
				ips =new FileInputStream(file1);
				file1.deleteOnExit();
				HSSFWorkbook wb = new HSSFWorkbook(ips);//XSSF支持XLSX格式表格
				HSSFSheet sheet = wb.getSheetAt(0);

//就是将所有类型直接读出来,不进行判断数据类型,但是会出现读取电话号码等信息出现E10后缀
//所以就将所有数据都以string读出就行了  //sheet.getRow(i).getCell(j).setCellType(XSSFCell.CELL_TYPE_STRING);  这样就能解决了
				//获得总列数
				int coloumNum=sheet.getRow(0).getPhysicalNumberOfCells();
				int rowNum=sheet.getLastRowNum();//获得总行数
				for (int i = 0; i <= rowNum; i++) {
		            for (int j = 0; j < coloumNum; j++) {
		            	sheet.getRow(i).getCell(j).setCellType(XSSFCell.CELL_TYPE_STRING);
//		                dataList.add(sheet.getRow(i).getCell(j).toString());
		            	dataList.add(sheet.getRow(i).getCell(j).getStringCellValue()); 
		            }
		     //   dataList中每次循环都是存着一行数据   
		            excelToMysqlService.lushuju(dataList,userId);
					dataList.clear();

		        }
			
					
			}

这样是不是简单很多了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值