最近有做一个类似百度网盘的项目,其中有用到excel文件上传和下载的功能,使用的poi来实现文件的上传和下载的,
先列一下实现的功能,再放代码.
1.模板类的导出;
2.excel文件的导出;
3.excel文件的导入;
pom.xml引入依赖
org.apache.poi
poi
3.9
org.apache.poi
poi-ooxml
3.9
org.apache.poi
poi-ooxml-schemas
3.9
com.google.guava
guava
20.0
//用户excel模板导出
@ResponseBody
@RequestMapping(value = "/exportExcelTemplet", produces = "application/json;charset=UTF-8", method = RequestMethod.GET)
public Result exportTemplet(HttpServletRequest request) throws IOException, BusinessException {
String url = userService.exportTemplet(request);
return ResultGenerator.genSuccessResult(url);
}
//用户excel批量导出
@ResponseBody
@RequestMapping(value = "/exportUserToExcel", method = RequestMethod.POST)
public Result exportUserToExcel(HttpServletRequest request) throws BusinessException {
String url = userService.exportUserToExcel(request);
return ResultGenerator.genSuccessResult(url);
}
//导入Excle表批量新建用户
@ResponseBody
@RequestMapping(value = "/addExcelUser", consumes = "multipart/form-data", method = RequestMethod.POST)
public Result addExcelUser(@RequestParam MultipartFile file, HttpServletRequest request) throws IOException, BusinessException {
List messageList = userService.importExcelUser(file, request);
return ResultGenerator.genSuccessResult(messageList);
}
//用户导入模板导出
@Override
public String exportTemplet(HttpServletRequest request) throws BusinessException {
String fileName = "UserTemplet_" + DateUtils.getTimeStringForFileName() + ".xls";
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
HSSFSheet sheet = hssfWorkbook.createSheet(Constant.USER_EXPORT_TEMPLET_SHEETNAME);
// 设置单元格的格式
setCellStyle(hssfWorkbook);
HSSFRow headRow = sheet.createRow(0);
// 设置表头
this.setHeadRowData2(headRow);
// 将表格导出
for (int i = 1; i < 6; i++) {
HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
//用户名称
dataRow.createCell(0).setCellValue("username" + i);
//用户别名
dataRow.createCell(1).setCellValue("别名" + i);
//邮箱
dataRow.createCell(2).setCellValue("test" + i + "@example.com");
//密码
dataRow.createCell(3).setCellValue("123456");
//部门
dataRow.createCell(4).setCellValue("department" + i);
}
//设置列宽
this.setAutoSizeColumn2(sheet);
this.exportFile(hssfWorkbook, fileName, request);
return "/temp/" + fileName;
}
//用户excel批量导入
@Override
public List importExcelUser(MultipartFile file, HttpServletRequest request) throws IOException, BusinessException {
String filename = "WrongUser_" + DateUtils.getTimeStringForFileName() + ".xls";
if (file.isEmpty()) {
throw new BusinessException("请选择需要上传的文件;");
}
boolean flag = true;
int rowCount = 0;
int count = 0;
String fileName = file.getOriginalFilename();
String postfix = fileName.substring(fileName.lastIndexOf("."), fileName.length());
InputStream fileInputStream = file.getInputStream();
Workbook book = null;
if (postfix.equals(".xls")) {
book = new HSSFWorkbook(new POIFSFileSystem(fileInputStream));
} else {
book = new XSSFWorkbook(fileInputStream);
}
Sheet sheet = book.getSheetAt(0);
if (sheet.getLastRowNum() <= 0) {
throw new BusinessException("传入Excel文件没有用户信息!");
}
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
HSSFSheet sheet2 = hssfWorkbook.createSheet(Constant.ADD_EXCEL_USER_WRONG_SHEETNAME);
// 设置单元格的格式
setCellStyle(hssfWorkbook);
HSSFRow headRow = sheet2.createRow(0);
// 设置表头
setHeadRowData2(headRow);
// 在基本信息后增加一列“错误信息”
headRow.createCell(5).setCellValue("错误信息");
StringBuffer sb = null;
//分析获取数据
List
//设置Excel单元格的风格
private void setCellStyle(HSSFWorkbook hssfWorkbook) {
CellStyle cellStyle = hssfWorkbook.createCellStyle();
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
}
//设置excel头信息
public void setHeadRowData(HSSFRow headRow) {
headRow.createCell(0).setCellValue("用户名称");
headRow.createCell(1).setCellValue("用户别名");
headRow.createCell(2).setCellValue("邮箱");
headRow.createCell(3).setCellValue("状态");
headRow.createCell(4).setCellValue("角色");
headRow.createCell(5).setCellValue("已用空间(MB)");
headRow.createCell(6).setCellValue("容量(MB)");
headRow.createCell(7).setCellValue("创建时间");
headRow.createCell(8).setCellValue("上次登陆时间");
}
//设置excel模板头信息
public void setHeadRowData2(HSSFRow headRow) {
headRow.createCell(0).setCellValue("用户名称");
headRow.createCell(1).setCellValue("用户别名");
headRow.createCell(2).setCellValue("邮箱");
headRow.createCell(3).setCellValue("密码");
headRow.createCell(4).setCellValue("部门");
}
//设置每列宽度
public void setAutoSizeColumn(HSSFSheet sheet) {
sheet.autoSizeColumn((short) 0); //调整第一列宽度
sheet.autoSizeColumn((short) 1); //调整第二列宽度
sheet.autoSizeColumn((short) 2); //调整第三列宽度
sheet.autoSizeColumn((short) 3); //调整第四列宽度
sheet.autoSizeColumn((short) 4); //调整第四列宽度
sheet.autoSizeColumn((short) 5); //调整第四列宽度
sheet.autoSizeColumn((short) 6); //调整第四列宽度
sheet.autoSizeColumn((short) 7); //调整第四列宽度
sheet.autoSizeColumn((short) 8); //调整第四列宽度
}
//设置每列宽度
public void setAutoSizeColumn2(HSSFSheet sheet) {
sheet.autoSizeColumn((short) 0); //调整第一列宽度
sheet.autoSizeColumn((short) 1); //调整第二列宽度
sheet.autoSizeColumn((short) 2); //调整第三列宽度
sheet.autoSizeColumn((short) 3); //调整第四列宽度
sheet.autoSizeColumn((short) 4); //调整第四列宽度
}
//将数据导出到excel表格中
private void exportFile(HSSFWorkbook hssfWorkbook, String fileName, HttpServletRequest request)
throws BusinessException {
//本地测试使用
//String realPath = "D:\\/temp";
String realPath = request.getSession().getServletContext().getRealPath("/temp");
if (StringUtils.isEmpty(realPath)) {
throw new BusinessException("服务器下载路劲获取失败");
}
File filePackage = new File(realPath);
if (!filePackage.exists()) {
filePackage.mkdirs();
}
String excelPath = realPath + "/" + fileName;
File file = new File(excelPath);
FileOutputStream fout = null;
try {
fout = new FileOutputStream(file);
if (null != fout) {
hssfWorkbook.write(fout);
fout.close();
}
} catch (Exception e) {
if (null != fout) {
try {
fout.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
throw new BusinessException(e.getMessage());
}
}
//文件上传数据分析
private List