poi导入Excel小功能

    项目中用到文件导入导出功能特别常见,尤其是excel来管理数据。

     导入导出excel原理几乎一样,调用poi的api,但又各有侧重,导入侧重的是判别格式,包括null,"",以及正则表达式等等,

导出侧重的是生成格式,包括字体,颜色,合并单元格,数据有效性等等

    今天先整个导入吧,相对简单点:


 
 
package org.john.util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelImportUtil {
	public static HashMap<String, List<Map<String, String>>> readExcel(
			String path) throws Exception {
		if (path == null) {
			return null;
		}
		System.out.println("@_@ the pathString is:" + path);
		Workbook wb = null;
		// 获取后缀名
		String ext = path.substring(path.lastIndexOf("."));
		System.out.println("@_@ the path after is :" + path);
		System.out.println("@_@ the ext is:" + ext);
		try {
			FileInputStream fis = new FileInputStream(path);
			System.out.println("fis:" + fis.toString());
			if (".xls".equals(ext)) {
				// 03版本
				wb = new HSSFWorkbook(fis);
				System.out.println("is 03 version");
			}
			if (".xlsx".equals(ext)) {
				// 07版本
				wb = new XSSFWorkbook(fis);
				System.out.println("is 07 version");
			} else {
				wb = null;
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		if (wb == null) {
			throw new Exception("Excel对象为空!!!");
		}
		// 用hashMap存储多个sheet
		HashMap<String, List<Map<String, String>>> ExcelMap = new HashMap<String, List<Map<String, String>>>();
		List<Map<String, String>> excelList = null;
		Map<String, String> excelMap = null;
		// 获取工作表个数
		int numOfSheets = wb.getNumberOfSheets();
		if (numOfSheets < 0) {
			return null;
		}
		for (int i = 0; i < numOfSheets; i++) {
			// 有隐藏的直接跳过
			if (wb.isSheetHidden(i)) {
				continue;
			}
			Sheet sheet = wb.getSheetAt(i);
			// 这个用法也常见。
			// Sheet sheet=wb.getSheet("sheet1");
			String sheetName = wb.getSheetName(i);
			// list存储每个工作表的信息。
			excelList = new ArrayList<Map<String, String>>();
			// 工作行
			Row row;
			// 工作单元格
			Cell cell;

			// 行
			int rownum = 0;
			// 列
			int columnum = 0;
			// 获取总行数
			rownum = sheet.getLastRowNum();
			// 此处判断内容是否为空。先跳过
			// if(rownum==0){}
			row = sheet.getRow(0);
			if (row == null) {
				continue;
			}
			// 获取总列数
			columnum = row.getLastCellNum();
			if (columnum == 0) {
				continue;
			}
			// 遍历每一条数据
			for (int j = 0; j < rownum; j++) {
				// 获取列对象;
				row = sheet.getRow(j);
				if (row == null) {
					continue;// 跳过空行
				}
				excelMap = new HashMap<String, String>();
				// 循环每个cell
				for (int k = 0; k < columnum; k++) {
					// 对获取的单元格进行格式处理,全部设为String格式。
					row.getCell(k).setCellType(Cell.CELL_TYPE_STRING);
					// 存储每个单元格的值。
					String cellStr = row.getCell(k).getStringCellValue().trim();
					// 遇到%需要特殊处理,因为Excel默认处理了百分数;
					if (row.getCell(k).getCellStyle().getDataFormatString()
							.indexOf("%") != -1) {
						System.out.println("@_@ cellStr before :" + cellStr);
						if (!cellStr.matches("[0-9.]+")) {
							throw new Exception("格式错误" + "第 " + j + "行,第 " + k + "列");
						}
						cellStr = Double.parseDouble(cellStr) * 100 + "%";
						System.out.println("@_@ cellStr after :" + cellStr);
					}
					// 存储每条数据
					excelMap.put("column" + new Integer(k + 1), cellStr);
				}
				if (excelMap == null || excelMap.size() == 0) {
					continue;
				}
				excelList.add(excelMap);
			}
			System.out.println("@_@ excelList is :" + excelList);
			ExcelMap.put(sheetName, excelList);
		}

		return ExcelMap;
	}
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot可以使用POI库来导入Excel文件。POI是一个Java库,用于读取和写入Microsoft Office格式的文件,包括Excel。以下是使用Spring Boot和POI导入Excel文件的基本步骤: 1. 添加POI依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 2. 创建Excel文件 在Excel中创建一个表格,包含要导入的数据。确保表格的列名与Java类中的属性名称相匹配。 3. 创建Java类 创建一个Java类来表示Excel中的数据。该类应该包含与Excel表格中的列相对应的属性。 4. 创建Controller 创建一个Spring Boot控制器,用于处理Excel文件的导入。在控制器中,使用POI库来读取Excel文件,并将数据映射到Java对象中。 5. 测试导入 使用Postman或其他HTTP客户端测试导入功能。将Excel文件作为请求体发送到控制器,并验证数据是否已成功导入。 以上是使用Spring Boot和POI导入Excel文件的基本步骤。 ### 回答2: Spring Boot 是一个快速开发框架,它通过自动配置帮助开发人员快速搭建应用程序,POI 则是一款提供操作 Microsoft Office 文件的 Java 库。在开发过程中,经常需要将数据导入 Excel 表格中,使用 Spring Boot 和 POI 结合起来,可以更加简单地实现数据导入 Excel功能。 首先,需要在 Maven 中引入 POI 相关依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 接下来,使用 Spring Boot 提供的文件上传组件 MultipartFile 接收上传的文件,并使用 POI 的工具类读取 Excel 文件中的数据: ``` import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; @RestController public class ExcelController { @PostMapping("/import") public String importExcel(@RequestParam("file") MultipartFile file) throws Exception { InputStream inputStream = file.getInputStream(); XSSFWorkbook workbook = new XSSFWorkbook(inputStream); // 获取第一个工作表 XSSFSheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { String value = cell.getStringCellValue(); System.out.println(value); } } workbook.close(); inputStream.close(); return "success"; } } ``` 在上述代码中,首先通过 MultipartFile 对象获取上传的文件,然后获取文件的输入流并传给 XSSFWorkbook 类,通过该类的 getSheetAt() 方法获取第一个工作表,接着循环遍历每一行和每一列的单元格,使用 getStringCellValue() 方法获取每个单元格的值。 值得注意的是,上述代码只是简单地读取 Excel 文件中的数据,如果需要将数据插入或更新至数据库,还需要对读取到的数据进行处理。 综上所述,使用 Spring Boot 和 POI 结合实现数据导入 Excel功能,既方便又高效,能够提高开发效率,并且可以通过扩展代码实现更多的功能。 ### 回答3: Spring Boot是一个基于Spring框架的快速开发应用程序的工具。它很适合于开发Web应用程序和微服务。在Spring Boot项目中使用POI(Poor Obfuscation Implementation)导入Excel文件可以方便地读取和处理大量数据。以下是关于如何使用Spring Boot和POI导入Excel的详细步骤。 第一步:在pom.xml中导入POI库依赖 ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.0.1</version> </dependency> ``` 第二步:编写处理Excel文件的Java程序 1. 首先使用@RequestMapped注释将处理程序的URL映射到控制器类中。 ```java @Controller @RequestMapping("/excel") public class ExcelController { } ``` 2. 通过使用@RequestParam注释接收上传Excel文件的请求,并使用MultipartFile对象处理上传的Excel文件。 ```java @PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) { } ``` 3. 读取Excel数据需要使用POI的对象,首先我们需要定义一个Workbook对象来表示整个Excel文件。 ```java Workbook workbook = null; ``` 4. 接下来使用try/catch块加载Excel文件,并使用XSSFWorkbook对象将文件数据转换成Workbook对象。 ```java try { workbook = new XSSFWorkbook(file.getInputStream()); } catch (IOException e) { e.printStackTrace(); } ``` 5. 通过Workbook对象获取Sheet对象,Sheet对象表示Excel文件中的一个工作表。 ```java Sheet sheet = workbook.getSheetAt(0); ``` 6. 接下来,使用for循环遍历工作表中的每一行。 ```java for (Row row: sheet) { } ``` 7. 在for循环中,我们可以使用getCell()方法获取每一行的单元格数据。 ```java Cell cell = row.getCell(0); ``` 8. 使用if语句检查单元格数据类型。 ```java if (cell.getCellType() == CellType.STRING) { } ``` 9. 如果单元格数据是字符串,则使用getString()方法获取该单元格的值。 ```java String cellValue = cell.getStringCellValue(); ``` 10. 最后,关闭workbook对象并返回结果。 ```java workbook.close(); return "redirect:/success"; ``` 总结:通过Spring Boot框架和POI库,处理Excel文件已经变得很简单。我们只需要在配置文件中导入POI库依赖项,编写处理Excel文件的Java程序,然后在控制器类中将其映射到相应的URL路径即可。通过这种方法,我们可以快速地读取和处理大量的Excel数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值