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. Create a workbook, corresponding to an Excel file HSSFWorkbook hssfWorkbook = new HSSFWorkbook () ; // 2. Add a sheet to the workbook , corresponding to a sheet in Excel HSSFSheet hssfSheet = hssfWorkbook . createSheet () ; // 3. Add a header to the sheet HSSFRow hssfRow = hssfSheet . createRow ( 0 ) ; // 4. Create a cell, set the value header, set the header to center // 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(); } }