1.需求分析
(1)上传一个模板
(2)根据模板,上传Excel表格导入数据
2.导入Excel
①给用户一个下载模板的链接
<div class="layui-form-item">
<label class="layui-form-label">选择文件</label>
<div class="layui-input-block">
<input type="file" name="mFile" id="no1" class="layui-input">
</div>
</div>
②Controller层
@RequestMapping("/importStudent")
public void importStudent(Long class_id, MultipartFile mFile, HttpServletRequest request,HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=utf-8");
List<Student> students = new ArrayList<Student>();//空的集合
InputStream is = mFile.getInputStream(); //获取文件的输入流
HSSFWorkbook workbook = new HSSFWorkbook(is);// 创建一个工作簿
HSSFSheet sheet = workbook.getSheetAt(0);// 取出第一个工作表,索引是0
String cellStr = null;// 单元格,最终按字符串处理
// 开始循环遍历行,表头不处理,从1开始
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
Student s = new Student();
HSSFRow row = sheet.getRow(i);// 获取行对象
if (row == null) {// 如果为空,不处理
continue;
}
for (int j = 0; j < row.getLastCellNum(); j++) {
HSSFCell cell = row.getCell(j);// 获取单元格对象
if (cell == null) {// 单元格为空设置cellStr为空串
cellStr = "";
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {// 对布尔值的处理
cellStr = String.valueOf(cell.getBooleanCellValue());
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {// 对数字值的处理
cellStr = cell.getNumericCellValue() + "";
} else {// 其余按照字符串处理
cellStr = cell.getStringCellValue();
}
// 下面按照数据出现位置封装到bean中
if (j == 0) {
s.setNo(cellStr); //学号
}else if(j == 1){
s.setName(cellStr);
}else if(j == 2){
s.setSex(cellStr);
}else if(j == 3){
s.setBirthday(cellStr);
}else if(j == 4){
s.setPhone(cellStr);
}
//设置要导入的班级
Classes c = cs.getById(class_id);
s.setC(c);//学生归属某个班级
}
students.add(s);
}
//把学生批量保存到数据库中去
int count = ss.addBanchStudent(students);
if (count > 0) {
response.getWriter().write("<script>alert('导入学生成功!');location.href='/stu/list/1/3';</script>");
} else {
response.getWriter().write("<script>alert('导入学生失败!');location.href='/stu/goImportPage';</script>");
}
}
script>alert('导入学生失败!');location.href='/stu/goImportPage';</script>");
}
}