sprongboot java使用poi解析excel文件
说明:excel文件有两种后缀名,分别是 .xls 和 .xlsx两种,
.xls格式的excel文件使用的是HSSF
.xlsx根式的使用XSSf
首先在pom文件中导入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
前台使用form表格传递文件(我这里使用了thymeleaf标签)
<form method="post" th:action="@{/exam/upload}" enctype="multipart/form-data">
<input type="hidden" th:value="${paper.paperId}" name="paperId" th:if="${not #strings.isEmpty(paper)}">
<div class="form-group">
<input type="file" name="file" class="form-control col-md-5">
</div>
<button class="btn btn-outline-primary" type="submit"
style="margin-left: 450px;">上传
</button>
</form>
注意:form标签中的enctype="multipart/form-data"
还有anction,因为我在controller上加了一个@RequestMapping("/exam/")
后台controller
@Controller
@RequestMapping("/exam/")
public class UploadController {
@PostMapping("/testupload")
public String testexcel(@RequestParam("file") MultipartFile file) {
System.out.println("testupload");
//Excel文件--得到Excel工作簿对象
XSSFWorkbook wb = null;
try {
wb = new XSSFWorkbook(file.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
/*Excel工作表--得到Excel工作表对象
excel文件左下方的标识
*/
XSSFSheet sheet = wb.getSheetAt(0);
int rowNum = sheet.getLastRowNum();//总行数
System.out.println("总行数(因为是从0开始的,所以输出会比实际上少1):" + rowNum);
//获得某一行的对象
XSSFRow row = null;
for (int i = 0; i <= rowNum; i++) {
row = sheet.getRow(i);//获取第i行
String st1 = row.getCell(0).toString();//获取第i行的第0列
String st2 = row.getCell(1).toString();//获取第i行的第1列
System.out.println(st1 + " " + st2);
}
System.out.println("解析成功");
return "exam/uploadPage";
}
}
这是我解析的excel文件
下面是我控制台的输入语句
最后解释一条语句
/*Excel工作表–得到Excel工作表对象
excel文件左下方的标识 */
XSSFSheet sheet = wb.getSheetAt(0);
这个数字 0指的是(都是从0开始的)
XSSFSheet sheet = wb.getSheetAt(1);
吧0改为1可以继续测试一下
ok,得到数据之后,包装对象,塞数据库里,这不一气呵成吗