SpringMVC实现Excel上传与解析详解

8 下载量 55 浏览量 更新于2024-09-01 收藏 97KB PDF 举报
"本文将详细介绍如何在SpringMVC框架中实现Excel文件的上传与解析功能。首先,我们来看一下如何配置SpringMVC以支持文件上传,然后探讨如何编写前端页面来选择并提交Excel文件,最后讲解后端如何接收并解析上传的Excel数据。" 在SpringMVC中,文件上传功能需要通过`MultipartResolver`来处理,这是一个专门用于处理多部分(multipart)请求的组件。在给定的XML配置中,我们使用了`CommonsMultipartResolver`,它是基于Apache Commons FileUpload库的实现。配置如下: ```xml <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10485760"/> <!-- 设置最大上传文件大小为10MB --> </bean> ``` `maxUploadSize`属性定义了允许的最大文件大小,单位为字节。在这个例子中,最大值是10MB。 前端页面通常使用HTML表单来提供文件上传功能。在JSP页面中,创建一个`multipart/form-data`类型的表单,用户可以选择文件并提交: ```html <form id="sourcefile" name="sourcefile" action="" method="post" enctype="multipart/form-data"> <input type="button" value="添加" onClick="addAirLine()" /> <input style="margin-left:20px;" id="source_file" name="sourceFile" type="file" value="选择文件" /> <input style="margin-left:20px;" data-loading-text="请勿重复提交" type="submit" value="上传" onClick="upPolicy()" /> <input style="margin-left:20px;" type="submit" value="下载模板" onClick="return downloadTemplate();" /> </form> ``` 这里有一个`<input type="file">`元素,用户可以通过它来选择要上传的Excel文件。`onClick`事件处理函数如`upPolicy()`用于处理文件上传的逻辑。 JavaScript代码可以用来增强用户体验,例如在文件上传时显示加载指示器,以及处理上传的逻辑: ```javascript function upPolicy() { document.sourcefile.action = "/login/policy/uploadCSV"; var submitUrl = document.getElementById("sourcefile").attributes["action"].value; $.ajax({ type: "POST", url: submitUrl, // ... }); } ``` 在后端,我们需要创建一个SpringMVC的Controller来接收并处理文件上传请求。首先,Controller方法的参数需要是`MultipartFile`类型,Spring会自动将上传的文件封装到这个对象中: ```java import org.springframework.web.multipart.MultipartFile; @RequestMapping(value = "/uploadCSV", method = RequestMethod.POST) public String handleFileUpload(@RequestParam("sourceFile") MultipartFile file) { // 解析Excel文件的代码 } ``` `@RequestParam`注解用于绑定前端表单的`name`属性,即`sourceFile`,这样我们可以访问到上传的文件。 解析Excel文件可以使用Apache POI库,它提供了Java API来操作Microsoft Office格式的文件,包括Excel。以下是一个简单的示例,展示如何读取Excel工作簿中的数据: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; Workbook workbook = new XSSFWorkbook(file.getInputStream()); Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表 for (Row row : sheet) { for (Cell cell : row) { // 读取单元格数据 String cellValue = cell.getStringCellValue(); // 处理数据... } } workbook.close(); ``` 这段代码创建了一个`Workbook`对象,从中获取第一个`Sheet`,然后遍历每一行和每一列,读取单元格的数据。根据实际需求,你可以对这些数据进行进一步的处理或存储。 SpringMVC的文件上传功能结合Apache POI库,使得在Java Web应用中处理Excel文件变得相对简单。通过前端页面、后端Controller和数据解析,可以实现完整的Excel文件上传和解析流程。
2018-06-09 上传
poi解析excel功能参数说明 此项目是基于springMVC实现的,基本流程为从前台jsp页面使用Ajax文件上传导入excel文件(.xls(97-03)/.xlsx(07以后)),传到后台controller调用相应工具类解析后返回指定参数做后续处理. 1. POIUtil.java工具类 解析通过MutilpartFile导入的Excel并解析里面数据,先判断文件的类型(excel处理有两种此处为两种通用)是.xls/.xlsx,通过workbook.getNumberOfSheets()获取工作簿数量,遍历工作簿,sheet.getLastRowNum()获取最大行数,将每行数据放入List list = new Array List(),并根据excel数据类型将器转换为字符串、数字、Boolean、公式、空值类型防止出现错误,最后返回一个list. 2. ExcelUtil.java工具类 解析通过MutilpartFile导入的Excel并解析里面数据,先判断文件的类型(excel处理有两种此处为两种通用)是.xls/.xlsx,采用Apache的POI的API来操作Excel,读取内容后保存到List中,再将List转Json(使用Linked,增删快,与Excel表顺序保持一致),Sheet表1————>List1<Map> 步骤1:根据Excel版本类型创建对于的Workbook以及CellSytle 步骤2:遍历每一个表中的每一行的每一列,这里做了些小改动,因为后续可能解析过后可能会保存入数据库,这里为第一行数据添加一个自定义表头 String[] p = new String[]{"name","age","sex","tel","address","e-mail","phone"}; 遍历的列数量以p的length为准 步骤3:一个sheet表就是一个Json,多表就多Json,对应一个 List 一个sheet表的一行数据就是一个 Map 一行中的一列,就把当前列头为key,列值为value存到该列的Map中 Map 一个线性Hash Map,以Excel的sheet表顺序,并以sheet表明作为key,sheet表转换Json后的字符串作为value 最后返回一个LinkedHashMap 3. ExcelToJsonPoi.java工具类 这个与上面工具类类似,不过这个是解析本地excel文件不是使用的流,使用迭代遍历sheet工作簿与每行每列的值,将所有类型作为String类型处理返回一个json对象输出至控制台