/**
* 导出Excel
* @param fileName
* -- 导出的文件名称
* @param request
* @param response
* @ @author tannc
* @create-time 2018-06-22 14:47:24
*/
@GetMapping("train/excel")
public void exportExcel(@RequestParam(value = "fileName",required = false) String fileName,
@RequestParam(value = "exportType",required = false) String exportType,
HttpServletRequest request,
HttpServletResponse response) throws IOException {
// 下载本地文件
if(StringUtils.isEmpty(fileName)) {
fileName = "training.xlsx".toString(); // 文件的默认保存名
}
// 定义临时存储文件位置
String path = request.getSession().getServletContext().getRealPath(Constants.UPLOAD_PDF);
File pathFile = new File(path);
if(!pathFile.exists()){
// 创建多级文件夹
pathFile.mkdirs();
}
// 获取登录用户的信息
LoginUser user = (LoginUser) request.getSession().getAttribute(Constants.USER_LOGIN_);
//返回解析后的Excel 文件地址
String pdfPath= exportFileService.exportTrainExcel(user.getCenterId(),user.getId(),path,exportType);
// 读到流中
// 文件的存放路径
InputStream inStream = null;
// 设置输出的格式
response.reset();
// 设置为二进制流格式
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
// 循环取出流中的数据
byte[] b = new byte[100];
int len =0;
try {
inStream =new FileInputStream(pdfPath);
while ((len = inStream.read(b)) > 0) {
response.getOutputStream().write(b, 0, len);
}
// 删除临时文件
File file =new File(pdfPath);
// 如果文件存在 删除。
if(file.exists()){
file.delete();
}
inStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
3、Service 层
/**
* 通用导出模板
*
* @param centerId
* @param id
* @param exportType
*
* @return
*/
@Override
public String exportTrainExcel(Integer centerId, Integer id, String path,String exportType) {
// 全局id
String uuid = UUID.randomUUID().toString();
// 数据区域
String[] cellTitle = {"姓名","学号","性别","入学日期"};
//需要导出的数据 ==========================》
List<String[]> dataList = new ArrayList<String[]>();
dataList.add(new String[]{"东邪","17232401001","男","2015年9月"});
dataList.add(new String[]{"西毒","17232401002","女","2016年9月"});
dataList.add(new String[]{"南帝","17232401003","男","2017年9月"});
dataList.add(new String[]{"北丐","17232401004","男","2015年9月"});
dataList.add(new String[]{"中神通","17232401005","女","2017年9月"});
// 数据区域 ==========================》
String filePath =path.concat(File.separator).concat(uuid).concat(".xlsx");
//输出
File file = new File(filePath);
// 构造Excel 数据
XSSFWorkbook workbook = ExcelUtil.getWorkbook(cellTitle,dataList);
FileOutputStream outStream =null;
try {
//将文件写到磁盘
outStream = new FileOutputStream(file);
workbook.write(outStream);
outStream.flush();
}catch ( IOException e ){
logger.info(e.getMessage());
e.printStackTrace();
}
finally {
if(null!= outStream){
try {
outStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return filePath;
4、导出工具类
/**
* @version 1.0
* @description:
* 导出Excel的工具类
* @projectName: com.taidii.staffdevelopment.util
* @className: staff-development
* @author:tannc
* @createTime:2018/6/25 10:48
*/
public class ExcelUtil {
/**
* 导出Excel
* //拿到palette颜色板
* HSSFPalette palette = excel.getCustomPalette();
* //这个是重点,具体的就是把之前的颜色 HSSFColor.LIME.index
* //替换为 RGB(51,204,204) 宝石蓝这种颜色
* //你可以改为 RGB(0,255,127)
* palette.setColorAtIndex(HSSFColor.LIME.index, (byte) 0, (byte) 255, (byte) 127);
* @param title 标题
* -- 标题
* @param dataList 内容
* -- 内容
* @return
*/
public static XSSFWorkbook getWorkbook(String []title, List<String[]> dataList){
XSSFWorkbook workBook = null;
workBook = new XSSFWorkbook();
// 生成一个表格
XSSFSheet sheet = workBook.createSheet();
workBook.setSheetName(0,"sheet1");
// 创建表格标题行 第一行
XSSFRow titleRow = sheet.createRow(0);
// 设置表头的样式
XSSFCellStyle style = workBook.createCellStyle();
XSSFColor color =new XSSFColor( new Color(180, 180, 180));
// 设置自定义背景色
style.setFillForegroundColor(color);
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
style.setBorderTop(BorderStyle.THIN);
style.setAlignment(HorizontalAlignment.CENTER);
Cell cell =null;
// 设置标题
for(int i=0;i<title.length;i++){
cell = titleRow.createCell(i);
cell.setCellValue(title[i]);
cell.setCellStyle(style);
}
// 定义内容的样式
CellStyle contentStyle=workBook.createCellStyle();
// 允许Excel 单元格换行
contentStyle.setWrapText(true);
// 设置边框
contentStyle.setBorderBottom(BorderStyle.THIN);
contentStyle.setBorderLeft(BorderStyle.THIN);
contentStyle.setBorderRight(BorderStyle.THIN);
contentStyle.setBorderTop(BorderStyle.THIN);
contentStyle.setAlignment(HorizontalAlignment.CENTER);
// 内容占位符
Cell contentCell = null;
// 设置内容
if(!CollectionUtils.isEmpty(dataList)){
Integer len = title.length;
//插入需导出的数据
for(int i=0;i<dataList.size();i++){
XSSFRow row = sheet.createRow(i+1);
// 遍历单元格
if(null!=dataList.get(i)){
if(len != dataList.get(i).length){
// 导出Excel 异常,表头设置长度和数据不一致。
throw new BizException(CommonError.EXCEL_ERROR);
}
else {
for(int j =0; j<len;j++){
//遍历循环值
contentCell = row.createCell(j);
// 设置样式
contentCell.setCellStyle(contentStyle);
// 设置单元格样式
contentCell.setCellValue(dataList.get(i)[j]);
}
}
}
}
}
// //数据加载完成,自动调整宽度
// for(int i=0;i<title.length;i++) {
// sheet.autoSizeColumn((short) i);
// }
return workBook;
}
}
5、完成