spring mvc 导出Excel
一、pom.xml引入jar包
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency>
二、加入Excel工具类ExcelUtils.java
import java.io.IOException; import java.lang.reflect.Field; import java.util.List; import javax.servlet.ServletOutputStream; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFFont; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelUtil { public static void exportExcel(List<Object> list,String sheetName, String[] titles, ServletOutputStream outputStream) { // 创建一个workbook 对应一个excel应用文件 XSSFWorkbook workBook = new XSSFWorkbook(); // 在workbook中添加一个sheet,对应Excel文件中的sheet XSSFSheet sheet = workBook.createSheet(sheetName); XSSFCellStyle headStyle = getHeadStyle(workBook); XSSFCellStyle bodyStyle = getBodyStyle(workBook); // 构建表头 XSSFRow headRow = sheet.createRow(0); XSSFCell cell = null; for (int i = 0 ; i < titles.length; i++) { cell = headRow.createCell(i); cell.setCellStyle(headStyle); cell.setCellValue(titles[i]); } // 构建表体数据 if (list != null && list.size() > 0) { for (int j = 0 ; j < list.size() ; j++) { XSSFRow bodyRow = sheet.createRow(j + 1); Class<? extends Object> bean = list.get(j).getClass(); //获取对象 /* * 得到类中的所有属性集合 */ Field[] fs = bean.getDeclaredFields(); for (int i = 0 ; i < fs.length ; i++) { Field field = fs[i]; field.setAccessible(true); //设置些属性是可以访问的 try { cell = bodyRow.createCell(i); cell.setCellStyle(bodyStyle); cell.setCellValue((String)FieldsUtils.invokeMethod(list.get(j), field.getName()));//得到此属性的值 }catch (Exception e) { } } } } try { workBook.write(outputStream); outputStream.flush(); outputStream.close(); }catch (IOException e) { e.printStackTrace(); }finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 合并单元格后给合并后的单元格加边框 * * @param region * @param cs */ public static void setRegionStyle(CellRangeAddress region, XSSFCellStyle cs, XSSFSheet sheet) { int toprowNum = region.getFirstRow(); for (int i = toprowNum ; i <= region.getLastRow() ; i++) { XSSFRow row = sheet.getRow(i); for (int j = region.getFirstColumn() ; j <= region.getLastColumn() ; j++) { XSSFCell cell = row.getCell(j); cell.setCellStyle(cs); } } } /** * 设置表头的单元格样式 * * @return */ public static XSSFCellStyle getHeadStyle(XSSFWorkbook wb) { // 创建单元格样式 XSSFCellStyle cellStyle = wb.createCellStyle(); // 设置单元格的背景颜色为淡蓝色 cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index); cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); // 设置单元格居中对齐 cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 设置单元格垂直居中对齐 cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); // 创建单元格内容显示不下时自动换行 cellStyle.setWrapText(true); // 设置单元格字体样式 XSSFFont font = wb.createFont(); // 设置字体加粗 font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD); font.setFontName("宋体"); font.setFontHeight((short) 200); cellStyle.setFont(font); // 设置单元格边框为细线条 cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN); return cellStyle; } /** * 设置表体的单元格样式 * * @return */ public static XSSFCellStyle getBodyStyle(XSSFWorkbook wb) { // 创建单元格样式 XSSFCellStyle cellStyle = wb.createCellStyle(); // 设置单元格居中对齐 cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 设置单元格垂直居中对齐 cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); // 创建单元格内容显示不下时自动换行 cellStyle.setWrapText(true); // 设置单元格字体样式 XSSFFont font = wb.createFont(); // 设置字体加粗 font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD); font.setFontName("宋体"); font.setFontHeight((short) 100); cellStyle.setFont(font); // 设置单元格边框为细线条 cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN); return cellStyle; } }
再加入FieldUtils.java,根据model中的列名获取对应的value
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; public class FieldsUtils { /** * @param object * @return * @throws SecurityException * @throws IllegalArgumentException * @throws NoSuchMethodException * @throws IllegalAccessException * @throws InvocationTargetException */ public static Map<String, Object> getFileds(Object object) throws SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException { Class<?> clazz = object.getClass(); Field[] fields = clazz.getDeclaredFields(); Map<String, Object> map = new HashMap<String, Object>(); for (int i = 0 ; i < fields.length ; i++) { Object resultObject = invokeMethod(object, fields[i].getName()); map.put(fields[i].getName(), resultObject); } return map; } /** * 根据列名获取值 */ public static Object invokeMethod(Object owner, String fieldname){ Object object = null; try { Class<?> ownerClass = owner.getClass(); Method method = null; method = ownerClass.getMethod("get" + captureName(fieldname)); object = method.invoke(owner); }catch (Exception e) { } return object; } /** * 首字母大写 * @param name * @return */ public static String captureName(String name) { // name = name.substring(0, 1).toUpperCase() + name.substring(1); // return name; char[] cs = name.toCharArray(); cs[0] -= 32; return String.valueOf(cs); } }
Controller中对应的代码
/** * excel导出 * @param request * @return * @throws IOException */ @RequestMapping(value = "/export.json") public String export(HttpServletRequest request,HttpServletResponse response) throws IOException { String fileName = new String(("Excel导出示例").getBytes(), "ISO8859_1"); response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xlsx");// 组装附件名称和格式 ServletOutputStream outputStream = response.getOutputStream(); String sheetName = "Excel导出示例列表"; List<Object> list = new ArrayList<Object>(); String[] titles = {"测试字段1","测试字段2","测试字段3".......}; ExcelEntity excelEntity = null; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for(Object bean : rows){ excelEntity = new ExcelEntity(); ... excelEntity.setCreateDate(dateFormat.format(bean.getCreateDate())); list.add(excelEntity); } ExcelUtil.exportExcel(list,sheetName, titles, outputStream); return null; }
js中应该这样写
window.location.href="${path}/export.do";
相关推荐
chenjia00 2020-07-04
Kafka 2020-09-18
Wepe0 2020-10-30
杜倩 2020-10-29
windle 2020-10-29
minerd 2020-10-28
mengzuchao 2020-10-22
Junzizhiai 2020-10-10
bxqybxqy 2020-09-30
风之沙城 2020-09-24
kingszelda 2020-09-22
大唐帝国前营 2020-08-18
yixu0 2020-08-17
TangCuYu 2020-08-15
xiaoboliu00 2020-08-15
songshijiazuaa 2020-08-15
xclxcl 2020-08-03
zmzmmf 2020-08-03
newfarhui 2020-08-03