- 导出方法接收一个list集合,和一个Class类型,和HttpServletResponse 对象
- 导出是可能会有下拉列表,所以需要一个map存储下拉列表数据源,传入参数后只需一行代码即可导出
- 导入方法需要传入file文件,以及一个Class类型,导入之后将会返回一个list集合,里面的对象就是传入类型的对象,传入参数后只需一行代码即可导入
首先需要创建三个注解 一个是EnableExport ,必须有这个注解才能导出
/** * 设置允许导出 */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface EnableExport { String fileName(); } 然后就是EnableExportField,有这个注解的字段才会导出到Excel里面,并且可以设置列宽。
/** * 设置该字段允许导出 * 并且可以设置宽度 */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface EnableExportField { int colWidth() default 100; String colName(); } 再就是ImportIndex,导入的时候设置Excel中的列对应的序号
/** * 导入时索引 */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface ImportIndex { int index() ; } 注解使用示例
首先,导入方法。在后台接收到前端上传的Excel文件之后,使用poi来读取Excel文件。扩展:接私活 我们根据传入的类型上面的字段注解的顺序来分别为不同的字段赋值,然后存入集合中,再返回 代码如下:
/** * 将Excel转换为对象集合 * @param excel Excel 文件 * @param clazz pojo类型 * @return */ public static List
/** * 获取一个基本的带边框的单元格 * @param workbook * @return */ private static HSSFCellStyle getBasicCellStyle(HSSFWorkbook workbook){ HSSFCellStyle hssfcellstyle = workbook.createCellStyle(); hssfcellstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); hssfcellstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); hssfcellstyle.setBorderRight(HSSFCellStyle.BORDER_THIN); hssfcellstyle.setBorderTop(HSSFCellStyle.BORDER_THIN); hssfcellstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); hssfcellstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); hssfcellstyle.setWrapText(true); return hssfcellstyle; } /** * 获取带有背景色的标题单元格 * @param workbook * @return */ private static HSSFCellStyle getTitleCellStyle(HSSFWorkbook workbook){ HSSFCellStyle hssfcellstyle = getBasicCellStyle(workbook); hssfcellstyle.setFillForegroundColor((short) HSSFColor.CORNFLOWER_BLUE.index); // 设置背景色 hssfcellstyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); return hssfcellstyle; } /** * 创建一个跨列的标题行 * @param workbook * @param hssfRow * @param hssfcell * @param hssfsheet * @param allColNum * @param title */ private static void createTitle(HSSFWorkbook workbook, HSSFRow hssfRow , HSSFCell hssfcell, HSSFSheet hssfsheet,int allColNum,String title){ //在sheet里增加合并单元格 CellRangeAddress cra = new CellRangeAddress(0, 0, 0, allColNum); hssfsheet.addMergedRegion(cra); // 使用RegionUtil类为合并后的单元格添加边框 RegionUtil.setBorderBottom(1, cra, hssfsheet, workbook); // 下边框 RegionUtil.setBorderLeft(1, cra, hssfsheet, workbook); // 左边框 RegionUtil.setBorderRight(1, cra, hssfsheet, workbook); // 有边框 RegionUtil.setBorderTop(1, cra, hssfsheet, workbook); // 上边框 //设置表头 hssfRow = hssfsheet.getRow(0); hssfcell = hssfRow.getCell(0); hssfcell.setCellStyle( getTitleCellStyle(workbook)); hssfcell.setCellType(HSSFCell.CELL_TYPE_STRING); hssfcell.setCellValue(title); } /** * 设置表头标题栏以及表格高度 * @param workbook * @param hssfRow * @param hssfcell * @param hssfsheet * @param colNames */ private static void createHeadRow(HSSFWorkbook workbook,HSSFRow hssfRow , HSSFCell hssfcell,HSSFSheet hssfsheet,List
导出数据
https://github.com/xyz0101/excelutils
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !