因为老大说表单填写评分太麻烦了,所以就要求我们改成excel表格上传进行评价;所以我一直没写过就只能自己摸索摸索了;
到了今天调试基本没有问题了。下文将是完整的代码,没有涉及到数据库。我现在的目的是先能正确上传并正确的读取数据。
好了,开始了。
首先;
这个是我要测试的表格,最左边还有两列,一列是序列号,一列是姓名,因为考虑到隐私,所以我就屏蔽,如果想跟我的一模一样进行的话自行添加一列姓名。
接着在pom文件里面导进;
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
导入完之后打开springboot的配置文件,设置文件上传的限制,不然springboot的默认最大的文件是1Mb.
spring.http.multipart.max-file-size=50Mb
spring.http.multipart.max-request-size=50Mb
配置文件添加了之后,好戏开始了,因为此次项目是前后端分离,所以我就只好自己先进行自己本地测试,所以我的springboot自己写了个简单的表单,内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>成功页面。。。</h1>
<form action="file/upload" method="post" enctype="multipart/form-data">
<p>文件上传</p>
<input type="file" name="file">
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>
这样我的测试页面就写完成了,接着重点的是后端的写法:
1.后台我定义了一个控制器Upload类:内容如下:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
@Controller
public class Upload {
@RequestMapping("file/upload")
@ResponseBody
public List<Object> pubggupload(@RequestParam("file")MultipartFile file) throws Exception {
String name=file.getOriginalFilename();
if(name.length()<6|| !name.substring(name.length()-5).equals(".xlsx")){
List<Object>li=new ArrayList<>();
li.add("文件格式错误");
return li;
}
List<Object>list = ExcelUtils.excelToShopIdList(file.getInputStream());
return list;
}
}
这样我的控制器的类就完成了;
接着我们要定义一个来处理excel表的内容的ExcelUtils类:内容如下:import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class ExcelUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(ExcelUtils.class);
public static List<Object> excelToShopIdList(InputStream inputStream) {
List<Object> list = new ArrayList<>();
Workbook workbook = null;
try {
workbook = WorkbookFactory.create(inputStream);
inputStream.close();
//工作表对象
Sheet sheet = workbook.getSheetAt(0);
//总行数
int rowLength = sheet.getLastRowNum() -1;
System.out.println("总行数有多少行"+rowLength);
//工作表的列
Row row = sheet.getRow(0);
//总列数
int colLength = row.getLastCellNum();
System.out.println("总列数有多少列"+colLength);
//得到指定的单元格
Cell cell = row.getCell(0);
for (int i = 4; i < rowLength-7; i++) {
row = sheet.getRow(i);
for (int j = 1; j < colLength+1; j++) {
cell = row.getCell(j);
// System.out.println(cell);
if (cell != null) {
cell.setCellType(Cell.CELL_TYPE_STRING);
String data = cell.getStringCellValue();
data = data.trim();
System.out.print(data);
//判断data是否是数字
if (StringUtils.isNumeric(data))
list.add(Integer.parseInt(data));
}
}
System.out.println("+");
}
} catch (Exception e) {
LOGGER.error("parse excel file error :", e);
}
return list ;
}
}
这样就能完成了excel文件上传并将文件内容进行解析,接着就可以进行数据或者验证等的操作了。
这里面还有很多的不足的地方,欢迎大家指正。后面还有写一个模板的下载和excel表格上传覆盖之前的模板,因为模板表格可能会变。