前一段时间写了POI的导出数据,发现好多时候也用到导入数据,在此写一下我的实现方式,大家有更好的方案,务必留言~
//(利用MultipartFile实现上传)
@RequestMapping("import")
public String ImportExcel(@RequestParam() MultipartFile uploadFile,HttpServletRequest request) throws Exception{
//调用这个类(在下面有写到)
UploadPicture uploadPicture = new UploadPicture();
// 获得上传的文件
File target = uploadPicture.upLoadFile(uploadFile, request);
List<Student> pList = new ArrayList<Student>();
excelFile = new FileInputStream(target);
// 将上传的文件放入到工作薄中
Workbook wb = new HSSFWorkbook(excelFile);
// 获取sheet页
Sheet sheetAt = wb.getSheetAt(0);
// 获取行数
int rowNum = sheetAt.getLastRowNum() + 1;
for(int i=1;i<rowNum;i++){
//得到行
Row row = sheetAt.getRow(i);
int lastCellNum = row.getLastCellNum();
for(int j = 0;j < lastCellNum; j++){
//循环赋值
Cell cell = row.getCell(j);
String cellValue = null;
switch (cell.getCellType()) {
case 0:
// 判断excel单元格内容的格式,并对其进行转换,转换成数据库里所存储的类型
cellValue = String.valueOf((int)cell.getNumericCellValue());
break;
case 1:
cellValue = cell.getStringCellValue();
break;
case 2:
cellValue = cell.getStringCellValue();
break;
case 3:
cellValue = cell.getStringCellValue();
break;
case 4:
cellValue = cell.getStringCellValue();
break;
}
switch (j) {
case 1:
student.setName(cellValue);
break;
case 2:
student.setHobby(cellValue);
break;
case 3:
student.setRemark(cellValue);
break;
case 4:
student.setCls(cellValue);
break;
}
}
pList.add(student);
}
if(pList.size()>0){
int sNum = pList.size();
for(int i=0;i<sNum;i++){
Student student = pList.get(i);
service.add(student);
}
}
return "redirect:list.action";
}
// 文件上传工具
public class UploadPicture {
public File upLoadFile(MultipartFile uploadFile,HttpServletRequest request) throws IOException{
String img=null;
MultipartFile file = uploadFile;
@SuppressWarnings("unused")
String uploadFileName = file.getOriginalFilename();
InputStream isRef = file.getInputStream();
String targetDir = request.getSession().getServletContext().getRealPath("upload");
SimpleDateFormat sdf=new SimpleDateFormat("yyyyy_MM_dd_hh_mm_ss");
String getDateString=sdf.format(new Date());
String newFileName=""+getDateString+System.nanoTime();
File targetFile = new File(targetDir,newFileName);
IOUtils.copy(isRef, fosRef);
return targetFile;
}
}