spring boot使用poi导入excel文档数据

本文详细介绍如何使用Java导入.xls和.xlsx格式的Excel文件,包括所需依赖包的配置、不同文件格式的处理方法及统一处理方式。文章提供代码示例,演示了如何读取Excel文件中的数据。

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

导入poi所需的包

<!-- poi -->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>3.16</version>
</dependency>
<!-- 导入xlsx文件时所需包 -->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>3.16</version>
</dependency>

如果导入的是.xls文件只需导入poi包即可,poi-ooxml是导入.xlsx文件时需要的包,如果两个包都要用最好两个包的版本一样。

导入excel有两种方法:

首先说一下 .xls 和 .xlsx分开导入文件时的方法

public void importStore(MultipartFile file)throws IOException{
		String fileName = file.getOriginalFilename();
		//文件名后缀
		String suffix = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
		
		if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {  
			throw new BusinessException("文件格式不正确");
	    } 
		//如果文件名后缀为xls
		if(suffix.equals("xls")){
			//创建HSSFWorkbook对象
			HSSFWorkbook workbook = new HSSFWorkbook(new POIFSFileSystem(file.getInputStream()));
			//获取有多少个sheet
			int sheetNum = workbook.getNumberOfSheets();
			
			for (int i = 0; i < sheetNum; i++) {
				//
				HSSFSheet sheet = workbook.getSheetAt(i);
				//获取sheet中一共有多少行
				int rowNum = sheet.getPhysicalNumberOfRows();
				for (int j = 0; j < rowNum; j++) {
					//获取行对象
					HSSFRow row = sheet.getRow(j);
					//第一行是表头,跳过
					if(j == 0){
						continue;
					}
					...
//					//获取行对象的单元格数量
//					int cellNum = row.getPhysicalNumberOfCells();
//					for (int k = 0; k < cellNum; k++) {
//						HSSFCell cell = row.getCell(k);
//						System.out.println("----------"+cell);
//						
//					}
				}
			}
		}
		//如果文件名后缀为xlsx
		if(suffix.equals("xlsx")){
			System.out.println("come on");
		
			//创建XSSFWorkbook对象
			XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
			//获取sheet页数
			int sheetNum = workbook.getNumberOfSheets();
			for (int i = 0; i < sheetNum; i++) {
				//获取XSSFSheet对象
				XSSFSheet sheet = workbook.getSheetAt(i);
				//获取sheet中一共有多少行
				int rowNum = sheet.getPhysicalNumberOfRows();
				
				for (int j = 0; j < rowNum; j++) {
					//获取行对象
					XSSFRow row = sheet.getRow(j);
					if(j == 0){
						continue;
					}
					//获取一行有多少个单元格
					int cells = row.getPhysicalNumberOfCells();

					for (int k = 0; k < cells; k++) {
						//获取值
						String value = row.getCell(k).getStringCellValue();
					}
				}
			}
			
		}
		
	}

以下这个方法不用区分文件后缀名

public void testImport(MultipartFile file) throws IOException, EncryptedDocumentException, InvalidFormatException{
		//获取文件名称
		String fileName = file.getOriginalFilename();
		//文件名后缀
		String suffix = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
		
		if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {  
			throw new BusinessException("文件格式不正确");
	    } 
	    //使用workbook 就不用区分.xls和.xlsx文件
		//创建Workbook对象
		Workbook workbook = WorkbookFactory.create(file.getInputStream());
		//获取sheet页数
		int sheetNum = workbook.getNumberOfSheets();
		//循环sheet页
		for (int i = 0; i < sheetNum; i++) {
			//获取sheet对象
			Sheet sheet = workbook.getSheetAt(i);
			//获取sheet里的行数
			int rowNum = sheet.getPhysicalNumberOfRows();
			//循环行数
			for (int j = 0; j < rowNum; j++) {
				//获取row对象
				Row row = sheet.getRow(j);
				
				//获取一行有多少个单元格
				int cells = row.getPhysicalNumberOfCells();

				for (int k = 0; k < cells; k++) {
					//获取值
					String value = row.getCell(k).getStringCellValue();
				}
			}
		}
		
	}

在这里插入图片描述在这里插入图片描述HSSFWorkbook是导入.xls文件时用到的对象,
XSSFWorkbook是导入.xlsx文件时用到的对象,可以看到这两个对象都实现了Workbook这个接口,所以我们在导入excel文档的时候可以直接用第二种方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值