上面的是效果图
选择导入首先我们需要吧Excel的数据全部转成文本(这个自己百度)
之后先导入pom依赖包
<!--文件上传组件-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<!--读取excel文件-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
需要在Controller层写入处理文件代码
这里我在获取Integer型和Double型的数据的时候,我对他进行先按照String获取之后就去除trim()前后空格的方法去净化字符串
之后用包装类的方法去处理字符串转回它们原来的类型
//处理文件上传
@RequestMapping(value = "/excelImport")
public String uploadImg(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
String contentType = file.getContentType();
String fileName = file.getOriginalFilename();
if (file.isEmpty()) {
return "文件为空!";
}
try {
//根据路径获取这个操作excel的实例
HSSFWorkbook wb = new HSSFWorkbook(file.getInputStream()); //根据页面index 获取sheet页
HSSFSheet sheet = wb.getSheetAt(0);
//实体类集合
List<Record> importDatas = new ArrayList<Record>();
HSSFRow row = null;
//循环sesheet页中数据从第二行开始,第一行是标题
System.out.println(sheet.getPhysicalNumberOfRows());
for (int i = 2; i < sheet.getPhysicalNumberOfRows()-2; i++) {
//获取每一行数据
row = sheet.getRow(i);
System.out.println(row.getCell(3).getStringCellValue());
System.out.println(row.getCell(0).getStringCellValue());
Record data = new Record();
String rid = row.getCell(0).getStringCellValue().trim();
data.setRid(Integer.parseInt(rid));
data.setStudentid(row.getCell(1).getStringCellValue());
data.setCourseid(row.getCell(2).getStringCellValue());
String fraction = row.getCell(3).getStringCellValue().trim();
data.setFraction(Double.parseDouble(fraction));
data.setDates(row.getCell(4).getStringCellValue());
data.setNewdates(row.getCell(5).getStringCellValue());
//importDatas.add(data);
recordService.insert(data);
}
} catch (Exception e) {
e.printStackTrace();
}
return "1";
}
之后我们要处理实体类的部分
实体类一定要写对,类型一定要匹配
之后是js和vue的部分
这里用的是ajax的同步方法传的Excel
function dr(){
$("#file").click();
}
function doimportExcel(){
var form = new FormData();
form.append("file", document.getElementById("file").files[0]);
$.ajax({
url: baseURL + '/platform/record/excelImport', //后台url
data: form,
cache: false,
async: false,
type: "POST", //类型,POST或者GET
dataType: 'json', //数据返回类型,可以是xml、json等
processData: false,
contentType: false,
success: function (data) { //成功,回调函数
if(data=1){
alert("导入成功");
}else{
alert("导入失败");
}
},
error: function (data) { //失败,回调函数
if(data=2){
alert("导入的文件没有值");
}
}
});
}
最后是html
这里是先走的导入进入方法
之后是在调的方法
<a class="btn btn-primary btn-sm" v-on:click="dr()"><i class="fa fa-plus"></i> 导入</a>
<input type="file" name="file" id="file" style="display:none" v-on:change="doimportExcel()"/>