本篇文章主要讲解实现用户在前台选择读取excel文件,获取excel中数据进行插入MySQL数据库中对应的属性列。
//定义批量添加按钮
<a href="#button" class="button icon log" onclick="BatchAdditionWindow()">批量添加教师a>
//提升培训批量上传教师对话框
<div id="uploadBatchAddEnchangeTeacher" class="easyui-window" style="width:380px;padding:10px 40px" closed="true">
<form id="upload" method="post" enctype="multipart/form-data">
<table border="0" style="margin-top:4px;" width="100%" align="center">
<tr>
<td>
<input class="easyui-filebox" id="uploadFile" name="uploadFile" data-options="prompt:'文件上传', buttonText:'选择文件'" style="width:100%">input>
td>
tr>
table>
form>
<div data-options="region:'south',border:false" style="text-align:center;padding:5px 0 0;">
<a class="easyui-linkbutton" data-options="iconCls:'icon-ok'" href="javascript:void(0)" onclick="BatchAdditionTeacher();" style="width:80px">上传a>
div>
div>
//打开文件上传对话框
function BatchAdditionWindow() {
var row = $('#ddg1').datagrid('getSelected');
if(row) {
$('#uploadBatchAddEnchangeTeacher').window('open').dialog('setTitle', '文件上传');
$('#uploadFileName').value = "";
}else{
alert("请先选择批量添加培训教师信息的项目!");
}
}
//
//批量添加教师到项目中
function BatchAdditionTeacher() {
var uploadFile=document.getElementById("uploadFile");
var filename=$(uploadFile).filebox('getValue');
var str=filename.split(".");
if(str[1]!="xls"&&str[1]!="xlsx") {
$.messager.alert("错误", '只能上传Excel文件!', 'error');
return;
}
var add="/batchAdditionTeacherToEnchange";
$('#upload').form('submit',{
url: add,
onSubmit: function(){
},
success: function(result){
var result = eval('('+result+')');
if (result.success=="true"){
$('#uploadBatchAddEnchangeTeacher').window('close');
$('#aa1').datagrid('reload');
$.messager.show({
title: 'Success',
msg: '文件上传成功!'
});
} else {
$.messager.show({
title: 'Error',
msg: '文件上传错误!'
});
}
}
});
}
//]]>
//注意://这两行代码也要加上 js遇到的部分问题都可以用这两行代码解决
@Insert("${sql}")
public void batchAdditionTeacherToEnchange(@Param("sql") String sql);
public void batchAdditionTeacherToEnchange(List enchangeTrain_teacherList) throws Exception{
String sql="insert into enchangetrain_teacher values ";
for (int i = 0; i < enchangeTrain_teacherList.size(); i++)
{
if (i == 0)
{
sql = sql + "(" + enchangeTrain_teacherList.get(i).getTno()+ "," +enchangeTrain_teacherList.get(i).getTrain_no()+ "," +enchangeTrain_teacherList.get(i).getTname()+ "," +enchangeTrain_teacherList.get(i).getGender()+ "," +enchangeTrain_teacherList.get(i).getWork_unit()+ "," +enchangeTrain_teacherList.get(i).age+ "," +enchangeTrain_teacherList.get(i).getTitle()+ "," +enchangeTrain_teacherList.get(i).getEducation_background()+ "," +enchangeTrain_teacherList.get(i).getDegree()+ "," +enchangeTrain_teacherList.get(i).getState()+ "," +enchangeTrain_teacherList.get(i).getEnrol_reviewer()+ "," +enchangeTrain_teacherList.get(i).getGraducation_audit()+ "," +enchangeTrain_teacherList.get(i).getTrain_grade()+ "," +enchangeTrain_teacherList.get(i).getRemarks() + ")";
}
else
{
sql = sql + ",(" + enchangeTrain_teacherList.get(i).getTno()+ "," +enchangeTrain_teacherList.get(i).getTrain_no()+ "," +enchangeTrain_teacherList.get(i).getTname()+ "," +enchangeTrain_teacherList.get(i).getGender()+ "," +enchangeTrain_teacherList.get(i).getWork_unit()+ "," +enchangeTrain_teacherList.get(i).age+ "," +enchangeTrain_teacherList.get(i).getTitle()+ "," +enchangeTrain_teacherList.get(i).getEducation_background()+ "," +enchangeTrain_teacherList.get(i).getDegree()+ "," +enchangeTrain_teacherList.get(i).getState()+ "," +enchangeTrain_teacherList.get(i).getEnrol_reviewer()+ "," +enchangeTrain_teacherList.get(i).getGraducation_audit()+ "," +enchangeTrain_teacherList.get(i).getTrain_grade()+ "," +enchangeTrain_teacherList.get(i).getRemarks() + ")";
}
}
trainManagementMapper.batchAdditionTeacherToEnchange(sql);
}
@RequestMapping(value="/batchAdditionTeacherToEnchange", method = RequestMethod.POST)
@ResponseBody
public Map batchAdditionTeacherToEnchange(@RequestParam("uploadFile") MultipartFile file, HttpServletRequest request, HttpSession session) throws Exception {
Map map=new HashMap<>();
File uploadDir = new File("E:\\fileupload");
//创建一个目录 (它的路径名由当前 File 对象指定,包括任一必须的父路径。)
if (!uploadDir.exists()) uploadDir.mkdirs();
//新建一个文件
String path="E:\\fileupload\\temp.xlsx";
File tempFile = new File(path);
try {
file.transferTo(tempFile);
Workbook workbook=null;
FileInputStream fis = new FileInputStream(tempFile);
if(path.toLowerCase().endsWith("xlsx")){
workbook = new XSSFWorkbook(fis);
}else if(path.toLowerCase().endsWith("xls")){
workbook = new HSSFWorkbook(fis);
}
Cell cell=null;
List enchange_trainList=new ArrayList();
for(int sheetIndex=0;sheetIndex//判断Excel中有几张表,目前只设定一张表
Sheet sheet=workbook.getSheetAt(sheetIndex);//获取到sheet表
if(!sheet.getSheetName().equals("提升培训用户信息")){
map.put("error","false");
return map;
}
for(int rowIndex=1;rowIndex<=sheet.getLastRowNum();rowIndex++){//获取到一行
Row row=sheet.getRow(rowIndex);
if(row==null){
continue;
}
EnchangeTrain_Teacher enchangeTrain_teacher=new EnchangeTrain_Teacher();
List strList=new ArrayList();
for(int i=0;iswitch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:// 字符串型
strList.add(cell.getRichStringCellValue().getString());
break;
case Cell.CELL_TYPE_NUMERIC:// 数值型
if (DateUtil.isCellDateFormatted(cell)) { // 如果是date类型则 ,获取该cell的date值
strList.add(cell.getDateCellValue().toString());
} else {// 纯数字
strList.add(String.valueOf((int)cell.getNumericCellValue()));
System.out.println(strList.get(i));
}
}
}
enchangeTrain_teacher.setTno(strList.get(0));
enchangeTrain_teacher.setTrain_no(strList.get(1));
enchangeTrain_teacher.setTname(strList.get(2));
enchangeTrain_teacher.setGender(strList.get(3));
enchangeTrain_teacher.setWork_unit(strList.get(4));
enchangeTrain_teacher.setAge(Integer.parseInt(strList.get(5)));
enchangeTrain_teacher.setTitle(strList.get(6));
enchangeTrain_teacher.setEducation_background(strList.get(7));
enchangeTrain_teacher.setDegree(strList.get(8));
enchangeTrain_teacher.setState(strList.get(9));
enchangeTrain_teacher.setEnrol_reviewer(strList.get(10));
enchangeTrain_teacher.setGraducation_audit(strList.get(11));
enchangeTrain_teacher.setTrain_grade(strList.get(12));
enchangeTrain_teacher.setRemarks(strList.get(13));
enchange_trainList.add(enchangeTrain_teacher);
System.out.println(enchangeTrain_teacher.toString());
}
}
trainManagementService.batchAdditionTeacherToEnchange(enchange_trainList);
deleteDirectory(path);
} catch (Exception e) {
e.printStackTrace();
}
map.put("success","true");
return map;
}
//删除文件
public static boolean deleteFile(String fileName) {
File file = new File(fileName);
// 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
if (file.exists() && file.isFile()) {
if (file.delete()) {
System.out.println("删除单个文件" + fileName + "成功!");
return true;
} else {
System.out.println("删除单个文件" + fileName + "失败!");
return false;
}
} else {
System.out.println("删除单个文件失败:" + fileName + "不存在!");
return false;
}
}
//删除文件夹
public static boolean deleteDirectory(String dir) {
// 如果dir不以文件分隔符结尾,自动添加文件分隔符
if (!dir.endsWith(File.separator))
dir = dir + File.separator;
File dirFile = new File(dir);
// 如果dir对应的文件不存在,或者不是一个目录,则退出
if ((!dirFile.exists()) || (!dirFile.isDirectory())) {
System.out.println("删除目录失败:" + dir + "不存在!");
return false;
}
boolean flag = true;
// 删除文件夹中的所有文件包括子目录
File[] files = dirFile.listFiles();
for (int i = 0; i < files.length; i++) {
// 删除子文件
if (files[i].isFile()) {
flag = deleteFile(files[i].getAbsolutePath());
if (!flag)
break;
}
// 删除子目录
else if (files[i].isDirectory()) {
flag = deleteDirectory(files[i]
.getAbsolutePath());
if (!flag)
break;
}
}
if (!flag) {
System.out.println("删除目录失败!");
return false;
}
// 删除当前目录
if (dirFile.delete()) {
System.out.println("删除目录" + dir + "成功!");
return true;
} else {
return false;
}
}
要插入的数据库中表结构如下:
数据插入前,前台显示信息如下:
插入信息时,选中编号为200002的提升培训,选取对应的excel表进行上传。excel表数据信息如下:
用户点击批量添加教师信息按钮,选择文件进行上传
上传文件成功后,可以看到,提升培训信息详情表格中多了一行工号为1的教师信息,前台展示信息如下: