package com.by.demo.utils; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.lang.reflect.Field; import java.util.List; /* *Ex生成 * */ public class ExUtils { public static HSSFWorkbook ExCreate(List<String> tableNames, List<?> objects, Integer row, Integer col) throws Exception { // 1.创建一个workbook,对应一个Excel文件 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); // 2.在workbook中添加一个sheet,对应Excel中的一个sheet HSSFSheet hssfSheet = hssfWorkbook.createSheet(); // 3.在sheet中添加表头 HSSFRow hssfRow = hssfSheet.createRow(0); // 4.创建单元格,设置值表头,设置表头居中 // HSSFCellStyle hssfCellStyle = hssfWorkbook.createCellStyle(); // hssfCellStyle.setAlignment(); if (tableNames != null && tableNames.size() != 0) { for (int i = 0; i < tableNames.size(); i++) { hssfRow.createCell(i).setCellValue(tableNames.get(i)); } } Field[] fields = null; Field ft = null; if (objects == null) { return hssfWorkbook; } if (tableNames == null || tableNames.size() == 0) { fields = objects.get(0).getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { hssfRow.createCell(i).setCellValue(fields[i].getName().toString()); } } for (int i = 0; i < objects.size(); i++) { hssfRow = hssfSheet.createRow(i + 1); fields = objects.get(i).getClass().getDeclaredFields(); for (int j = 0; j < fields.length; j++) { ft = fields[j]; ft.setAccessible(true); hssfRow.createCell(j).setCellValue(ft.get(objects.get(i)).toString()); } } return hssfWorkbook; } public static void downex(String fileName, HttpServletResponse response, HSSFWorkbook hssfWorkbook) throws IOException { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); hssfWorkbook.write(byteArrayOutputStream); byte[] bytes = byteArrayOutputStream.toByteArray(); InputStream inputStream = new ByteArrayInputStream(bytes); response.reset(); // 必要地清除response中的缓存信息 // 在浏览器提示用户是保存还是下载 response.setContentType("application/octet-stream; charset=UTF-8");// 根据个人需要,这个是下载文件的类型 response.setHeader("Content-Disposition", "attachment;filename=" + new String((fileName + ".xls").getBytes(), "iso-8859-1")); OutputStream outputStream = response.getOutputStream(); byte[] content = new byte[1024]; int length; while ((length = inputStream.read(content)) != -1) { outputStream.write(content, 0, length); } inputStream.close(); outputStream.close(); } }