poi-3.8.jar
poi-ooxml-3.8.jar
添加Excel标题对象 /** * 用来存储Excel标题的对象,通过该对象可以获取标题和方法的对应关系 * * @author monkey * */ public class ExcelHeader implements Comparable
定义annotation类,可以通过该类设置导出相应的属性,标题及排序 import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * 用来在对象的get方法上加入的annotation,通过该annotation说明某个属性所对应的标题 * @author Administrator * */ @Retention(RetentionPolicy.RUNTIME) public @interface ExcelResources { /** * 属性的标题名称 * @return */ String title(); /** * 在excel的顺序 * @return */ int order() default 9999; }
操作Excel,设置Excel标题样式,sheet名称,sheet每页显示条数等信息 import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Workbook; /** * Excel 操作类 * * @author houzhiqing * */ @SuppressWarnings('unchecked') public class ExcelUtil { private static final String POSITION_TITLE = 'title'; private static final String POSITION_BODY = 'body'; private static ExcelUtil eu = new ExcelUtil(); private ExcelUtil() { } public static ExcelUtil getInstance() { return eu; } /** * 导出对象到Excel,不是基于模板的,直接新建一个Excel完成导出,基于路径的导出 * * @param outPath * 输出路径 * @param objs * 数据源 * @param clz * 类 * @param sheetName * 分sheet导出是sheet的名字 , 如 “sheet” -> sheet1,sheet2... * @param pageSize * 每个sheet要显示多少条数据 */ public void exportObj2Excel(String outPath, List objs, Class clz, String sheetName, int pageSize) { Workbook wb = handleObj2Excel(objs, clz, sheetName, pageSize); FileOutputStream fos = null; try { fos = new FileOutputStream(outPath); wb.write(fos); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fos != null) fos.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 导出对象到Excel,不是基于模板的,直接新建一个Excel完成导出,基于路径的导出 * * @param outPath * 输出路径 * @param objs * 数据源 * @param clz * 类 * @param sheetName * 分sheet导出是sheet的名字 , 如 “sheet” -> sheet1,sheet2... * @param pageSize * 每个sheet要显示多少条数据 */ public HSSFWorkbook handleObj2Excel(List objs, Class clz, String sheetName, int pageSize) { HSSFWorkbook wb = null; try { wb = new HSSFWorkbook(); // TODO 获取表头 List
导出对象实体类,实际项目中这个类可以有更多的属性 import java.io.Serializable; import java.util.Date; import com.monkey.poi.util.ExcelResources; public class ProductCard implements Serializable { private static final long serialVersionUID = -705704L; private Integer id; private String code; private String codePwd; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @ExcelResources(title='卡号', order=1) public String getCode() { return code; } public void setCode(String code) { this.code = code; } @ExcelResources(title='密码', order=2) public String getCodePwd() { return codePwd; } public void setCodePwd(String codePwd) { this.codePwd = codePwd; } }
junit测试 @Test public void test002() { List
Excel样式部分我是按照我们项目中的所用的格式导出,各位在自己项目中可以自己定义
Excel可以分开单独显示不同的
下载部分请查考下一篇文章