一、Maven依赖
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.2.0</version>
</dependency>
二、编辑导出数据对象类,使用注解的形式进行标记各个字段类型,name对应excel表格的表头,orderNum每一列排序,从左到右,width代表每一列的宽度,具体代码如下(省略Get和Set方法)
public class AssetsStatistics { @Excel(name = "序号", orderNum = "0",width = 10) private String id; @Excel(name = "所属公司", orderNum = "1",width = 20) private String provincename; @Excel(name = "公司编码", orderNum = "2",width = 10) private String provincecode; @Excel(name = "ip", orderNum = "3",width = 15) private String ip; @Excel(name = "资产URL", orderNum = "4",width = 20) private String url; }
三、设置excel自定义样式PoiExportStyle
public class PoiExportStyle extends ExcelExportStylerDefaultImpl implements IExcelExportStyler { public PoiExportStyle(Workbook workbook) { super(workbook); } @Override public CellStyle getHeaderStyle(short headerColor) { CellStyle titleStyle = workbook.createCellStyle(); Font font = workbook.createFont(); font.setFontHeightInPoints((short) 20); titleStyle.setFont(font); titleStyle.setBorderLeft((short) 1); // 左边框 titleStyle.setBorderRight((short) 1); // 右边框 titleStyle.setBorderBottom((short) 1); titleStyle.setBorderTop((short) 1); titleStyle.setFillForegroundColor((short) 41); // 填充的背景颜色 titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND.getCode()); titleStyle.setAlignment(CellStyle.ALIGN_CENTER); titleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); return titleStyle; } @Override public CellStyle stringNoneStyle(Workbook workbook, boolean isWarp) { CellStyle style = workbook.createCellStyle(); style.setBorderLeft((short) 1); // 左边框 style.setBorderRight((short) 1); // 右边框 style.setBorderBottom((short) 1); style.setBorderTop((short) 1); style.setAlignment(CellStyle.ALIGN_CENTER); style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); style.setDataFormat(STRING_FORMAT); if (isWarp) { style.setWrapText(true); } return style; } @Override public CellStyle getTitleStyle(short color) { CellStyle titleStyle = workbook.createCellStyle(); titleStyle.setBorderLeft((short) 1); // 左边框 titleStyle.setBorderRight((short) 1); // 右边框 titleStyle.setBorderBottom((short) 1); titleStyle.setBorderTop((short) 1); titleStyle.setFillForegroundColor((short) 41); // 填充的背景颜色 titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND.getCode()); titleStyle.setAlignment(CellStyle.ALIGN_CENTER); titleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); titleStyle.setWrapText(true); return titleStyle; } @Override public CellStyle stringSeptailStyle(Workbook workbook, boolean isWarp) { return isWarp ? stringNoneWrapStyle : stringNoneStyle; }
四、引用excel自定义样式封装成工具类
public class PoiUtil { public static void creatExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, String directory) throws IOException { ExportParams exportParams = new ExportParams(title, sheetName); exportParams.setHeaderHeight((double)100); exportParams.setStyle(PoiExportStyle.class); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list); if (workbook != null);{ //将Excel文件放到本地路径下 String directory = "D:/data"; // 本地目录 FileOutputStream os = new FileOutputStream(directory+fileName); workbook.write(os); os.close(); } } }
五、list数据生成excel文件---单个sheet和多个sheet
//单个sheet public String creatAssetsQuarterExcel() throws Exception { String title = "2020年第1季度资产清单"; List<AssetsStatistics> list = secAssetsService.selectListByTime();//从数据库查询数据 if(!CollectionUtils.isEmpty(list)) { Integer no = 1; for (AssetsStatistics v : list) { v.setId(String.valueOf(no++)); } } PoiUtil.creatExcel(list, title, title, AssetsStatistics.class, title+".xls", excelReport); return title+".xls"; }
//多sheet public String creatMonthExcelByAssets() throws Exception { Workbook workBook = null; try { // 主机资产表 List<AssetsStatistics> hostlist = countHostAssets(); Map<String, Object> hostExportMap = getSheetMap("主机资产表",hostlist); // 数据库资产表 List<AssetsStatistics> dblist = countDbAssets(); Map<String, Object> dbExportMap = getSheetMap("数据库资产表",dblist); // 将sheet1、sheet2使用得map进行包装 List<Map<String, Object>> sheetsList = new ArrayList<>(); sheetsList.add(hostExportMap); sheetsList.add(dbExportMap); workBook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF); // String fileName = URLEncoder.encode("资产表.xls", "UTF-8"); String fileName ="资产表.xls"; if (workBook != null){ //将Excel文件放到本地路径下 FileOutputStream os = new FileOutputStream(excelReport+fileName); workBook.write(os); os.close(); } return fileName; }catch (Exception e){ e.printStackTrace(); return e.getMessage(); }finally { if(workBook != null) { try { workBook.close(); } catch (IOException e) { e.printStackTrace(); return e.getMessage(); } } } } /** * 设置excel 中 sheet 的参数 * @param sheetName sheet名称 * @param list sheet 数据列表 * @return */ private Map<String, Object> getSheetMap(String sheetName,List<AssetsProblemStatistics> list) { // 创建参数对象(用来设定excel得sheet得内容等信息) ExportParams exportParams = new ExportParams(); exportParams.setHeaderHeight((double)100); exportParams.setStyle(PoiExportStyle.class); // 设置sheet得名称 exportParams.setSheetName(sheetName); // 创建sheet1使用得map Map<String, Object> sheetExportMap = new HashMap<>(); // title的参数为ExportParams类型,目前仅仅在ExportParams中设置了sheetName sheetExportMap.put("title", exportParams); // 模版导出对应得实体类型 sheetExportMap.put("entity", AssetsProblemStatistics.class); // sheet中要填充得数据 sheetExportMap.put("data", list); return sheetExportMap; }
六、结果展示