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(); } }