知方号

知方号

使用easypoi导出excel 自定义表格样式

写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

  

关于自定义样式,官方文档有提到,

需要注意一下,这个getHeaderStyle代表的其实是sheet页的title,而getTitleStyle代表才是标题头,看下图:

本篇简单测试下设置数据行样式和标题的样式,导出的样子大概是这种:

贴一下自定义样式的代码:

public class ExcelStyleUtil implements IExcelExportStyler { // 数据行类型 private static final String DATA_STYLES = "dataStyles"; // 标题类型 private static final String TITLE_STYLES = "titleStyles"; //数据行样式 private CellStyle styles; // 标题样式 private CellStyle titleStyle; public ExcelStyleUtil(Workbook workbook) { this.init(workbook); } private void init(Workbook workbook) { this.styles = initStyles(workbook); this.titleStyle = initTitleStyle(workbook); } /** * 标题样式 */ @Override public CellStyle getTitleStyle(short i) { return titleStyle; } @Override public CellStyle getStyles(boolean parity, ExcelExportEntity entity) { return styles; } /** * 获取样式方法 * * @param dataRow 数据行 * @param obj 对象 * @param data 数据 */ @Override public CellStyle getStyles(Cell cell, int dataRow, ExcelExportEntity entity, Object obj, Object data) { return getStyles(true, entity); } @Override public CellStyle getTemplateStyles(boolean isSingle, ExcelForEachParams excelForEachParams) { return null; } /** * 初始化--标题行样式 * @param workbook * @return */ private CellStyle initTitleStyle(Workbook workbook) { return buildCellStyle(workbook,TITLE_STYLES); } /** * 初始化--数据行样式 * @param workbook * @return */ private CellStyle initStyles(Workbook workbook) { return buildCellStyle(workbook,DATA_STYLES); } /** * 设置单元格样式 * @param workbook * @param type 类型 用来区分是数据行样式还是标题样式 * @return */ private CellStyle buildCellStyle(Workbook workbook,String type) { CellStyle style = workbook.createCellStyle(); // 字体样式 Font font = workbook.createFont(); if(TITLE_STYLES.equals(type)){ font.setFontHeightInPoints((short)12); font.setBold(true); } if(DATA_STYLES.equals(type)){ font.setFontHeightInPoints((short)10); } font.setFontName("Courier New"); style.setFont(font); // 设置底边框 style.setBorderBottom(BorderStyle.THIN); // 设置左边框 style.setBorderLeft(BorderStyle.THIN); // 设置右边框; style.setBorderRight(BorderStyle.THIN); // 设置顶边框; style.setBorderTop(BorderStyle.THIN); // 设置底边颜色 style.setBottomBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex()); // 设置左边框颜色; style.setLeftBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex()); // 设置右边框颜色; style.setRightBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex()); // 设置顶边框颜色; style.setTopBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex()); // 设置自动换行; style.setWrapText(false); // 设置水平对齐的样式为居中对齐; style.setAlignment(HorizontalAlignment.CENTER); // 设置垂直对齐的样式为居中对齐; style.setVerticalAlignment(VerticalAlignment.CENTER); return style; }}

自定义了样式怎么使样式生效呢?ExportParams有个setStyle方法(public void setStyle(Class style))可以设置样式,设置样式只需加入一行代码即可:exportParams.setStyle(ExcelStyleUtil.class);

导出的表格明显看出有点问题,商品的右边框没有闭合,有知道怎么完善的善良的小伙伴请告诉我一下。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。