web导入excel(利用POI解析)

今天跟大家分享下,如何导入excel文件(此处以POI作为例子讲解)

1、导入相关jar包(文件上传和poi的jar)

2、html页面代码,form表单提交,也可以用ajax

<form action="/MyTest/UploadAndPoiExcelServlet" enctype="multipart/form-data" method="post">
	<input type="file" name="f1"></input>
	<input type="submit" value="上传"></input>
</form>

3、Servlet代码,拿到上传的文件流

protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		try {
			FileItemFactory factory = new DiskFileItemFactory();
			// 文件上传核心工具类
			ServletFileUpload upload = new ServletFileUpload(factory);
			upload.setFileSizeMax(10 * 1024 * 1024); // 单个文件大小限制
			upload.setSizeMax(50 * 1024 * 1024); // 总文件大小限制
			upload.setHeaderEncoding("UTF-8"); // 对中文文件编码处理

			if (ServletFileUpload.isMultipartContent(request)) {
				List<FileItem> list = upload.parseRequest(request);
				// 遍历
				for (FileItem item : list) {
					if (!item.isFormField()) {
						readExcel(item.getInputStream());
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
	
4、POI读取excel工具类

public static void readExcel(InputStream input) throws Exception  {
			Workbook wb = null;
		try {
			wb = WorkbookFactory.create(input);
			Sheet sheet = wb.getSheetAt(0); // 获得第一个表单
			int totalRow = sheet.getLastRowNum();// 得到excel的总记录条数
			int columtotal = sheet.getRow(0).getPhysicalNumberOfCells();// 表头总共的列数
			System.out.println("总行数:" + totalRow + ",总列数:" + columtotal);
			for (int i = 1; i <= totalRow; i++) {// 遍历行
				for (int j = 0; j < columtotal; j++) {
					sheet.getRow(i).getCell(j).setCellType(Cell.CELL_TYPE_STRING);
					System.out.print(sheet.getRow(i).getCell(j).getStringCellValue() + "             ");
				}
				System.out.println();
			}
			
		} catch (Exception ex) {
			ex.printStackTrace();
			throw new Exception(ex);
		}finally {
			 try {
				input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

5、测试

在浏览器中访问html


Excel文件内容如下:


eclipse控制台输出测试结果如下(第一行未打印是因为我从第二行开始循环的,一般第一行为表头,要打印第一行,将遍历行那儿的变量i=1改为i=0即可):



  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要实现Spring Boot整合导入Excel并使用POI解析具有两个标题行的Excel文件,可以按照以下步骤进行操作: 1. 在pom.xml文件中添加POI和Spring Boot Web依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 2. 创建一个Excel导入的Controller,其中包含一个POST请求处理程序,将Excel文件作为参数传递: ``` @RestController public class ExcelImportController { @PostMapping("/import-excel") public ResponseEntity<String> importExcel(@RequestParam("file") MultipartFile file) { // TODO: 实现Excel导入逻辑 return ResponseEntity.ok("导入成功!"); } } ``` 3. 在导入Excel的方法中,使用POI解析Excel文件,获取第一个标题行和第二个标题行的内容,并将其存储在一个List对象中: ``` List<List<String>> rows = new ArrayList<>(); Workbook workbook = new XSSFWorkbook(file.getInputStream()); Sheet sheet = workbook.getSheetAt(0); int firstRowNum = sheet.getFirstRowNum(); int lastRowNum = sheet.getLastRowNum(); for (int i = firstRowNum; i <= lastRowNum; i++) { Row row = sheet.getRow(i); if (row != null) { List<String> rowData = new ArrayList<>(); int firstCellNum = row.getFirstCellNum(); int lastCellNum = row.getLastCellNum(); for (int j = firstCellNum; j <= lastCellNum; j++) { Cell cell = row.getCell(j); if (cell != null) { rowData.add(cell.toString()); } } rows.add(rowData); } } ``` 4. 处理完Excel文件后,可以将解析后的数据存储到数据库中或者在控制台输出: ``` for (List<String> row : rows) { for (String cell : row) { System.out.print(cell + "\t"); } System.out.println(); } ``` 这样,就可以使用Spring Boot和POI实现导入具有两个标题行的Excel文件并进行解析了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值