要做生成Excel然后再生成图片的任务,做成三线表的形式,但阅读了官方demo代码发现通过注解无法处理好最后一行下框线(已有策略都是按列设定或根据表头表体设定,没有逐行设定格式的),需要自己实现针对每一行的策略。

三线表格式:

表头上下边框为实线;表体除最后一行的数据上下边框均为None,最后一行上边框设为None,下边框实线。关键就是处理好表体替他行和最后一行的格式。

白色背景三线表

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.VerticalAlignment;import java.util.ArrayList;
import java.util.List;    public String ThreeLineWrite(List<ChartItem> data) {//路径可根据实际修改String fileName = "F://1.xlsx";//表头样式WriteCellStyle headWriteCellStyle = new WriteCellStyle(); //只要上下边框,左右边框为NoneheadWriteCellStyle.setBorderTop(BorderStyle.MEDIUM);headWriteCellStyle.setBorderBottom(BorderStyle.MEDIUM);headWriteCellStyle.setBorderLeft(BorderStyle.NONE);headWriteCellStyle.setBorderRight(BorderStyle.NONE);headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());//字体WriteFont headWriteFont = new WriteFont();headWriteFont.setFontHeightInPoints((short)26);//设置字体大小headWriteFont.setBold(false);  headWriteCellStyle.setWriteFont(headWriteFont);//除最后一行以外的表体样式WriteCellStyle bodyStyle = new WriteCellStyle();bodyStyle.setVerticalAlignment(VerticalAlignment.CENTER);bodyStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);WriteFont bodyWriteFont = new WriteFont();bodyWriteFont.setFontHeightInPoints((short)30);bodyStyle.setWriteFont(bodyWriteFont);// 设置边框bodyStyle.setBorderTop(BorderStyle.NONE);bodyStyle.setBorderLeft(BorderStyle.NONE);bodyStyle.setBorderRight(BorderStyle.NONE);bodyStyle.setBorderBottom(BorderStyle.NONE);//最后一行WriteCellStyle lastRow = new WriteCellStyle();//最后一行边框lastRow.setBorderBottom(BorderStyle.MEDIUM);lastRow.setBorderTop(BorderStyle.NONE);lastRow.setBorderLeft(BorderStyle.NONE);lastRow.setBorderRight(BorderStyle.NONE);//字体lastRow.setWriteFont(bodyWriteFont);lastRow.setHorizontalAlignment(HorizontalAlignment.CENTER);lastRow.setVerticalAlignment(VerticalAlignment.CENTER);//整合表体样式List<WriteCellStyle> preList = new ArrayList<>();//除最后一行以外的样式放入容器for (int i = 0; i <data.size()-1; i++) {preList.add(bodyStyle);}//最后一行的样式放入容器preList.add(lastRow);//根据表头表体策略生成一个整体的策略HorizontalCellStyleStrategy dataTableStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, preList);//这里就是照搬demo的代码了EasyExcel.write(fileName, ChartItem.class).registerWriteHandler(dataTableStrategy).sheet("模板").doWrite(() -> {// 分页查询数据return data;});return fileName;}

其中,实体类和data的定义:

package com.alibaba.easyexcel.test.demo.write;import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.*;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;@Getter
@Setter
@EqualsAndHashCode@ContentRowHeight(60)
@HeadRowHeight(60)
@ColumnWidth(30)public class ChartItem {@ColumnWidth(50)@ExcelProperty("名称")public String name;@ExcelProperty("交易时间")public String TradeTime;@ExcelProperty("持仓时长")public  String HoldingDuration;@ExcelProperty("期望换手率")public String ExpectChangeRate;@ExcelProperty("买完成率")public String BuyCompleteRate;@ExcelProperty("卖完成率")public String SellCompleteRate;@ColumnWidth(45)@ExcelProperty("未完成股票前三支")public String TheFirstThreeUnComplete;/*** 忽略这个字段*/@ExcelIgnoreprivate String ignore;
}
    //生成数据(测试用)public List<ChartItem> data() {List<ChartItem> list = ListUtils.newArrayList();for (int i = 0; i < 7; i++) {ChartItem data = new ChartItem();data.setName("字符串");data.setBuyCompleteRate("1");data.setSellCompleteRate("1");data.setTradeTime("1");data.setHoldingDuration("1");data.setExpectChangeRate("1");data.setTheFirstThreeUnComplete("1");list.add(data);}return list;}

在filename路径下可以看到xlsx文件,转为图片后效果如图

交错背景底纹三线表,并自定义背景色

public static final String DEFAULT_BACKGROUND_COLOR = "#f0f2f5";
public String ThreeLineWrite(List<ChartItem> data) {// 自定义背景色int r = Integer.parseInt((DEFAULT_BACKGROUND_COLOR.substring(1,3)),16);int g = Integer.parseInt((DEFAULT_BACKGROUND_COLOR.substring(3,5)),16);int b = Integer.parseInt((DEFAULT_BACKGROUND_COLOR.substring(5,7)),16);HSSFWorkbook wb = new HSSFWorkbook();HSSFPalette palette = wb.getCustomPalette();HSSFColor hssfColor = palette.findSimilarColor(r, g, b);String fileName = "F://1.xlsx";//表头样式WriteCellStyle headWriteCellStyle = new WriteCellStyle();WriteFont bodyWriteFont = new WriteFont();WriteFont headWriteFont = new WriteFont();headWriteFont.setFontHeightInPoints((short)26);//设置字体大小headWriteFont.setBold(false);headWriteFont.setColor(IndexedColors.GREY_80_PERCENT.getIndex());bodyWriteFont.setColor(IndexedColors.GREY_80_PERCENT.getIndex());bodyWriteFont.setFontHeightInPoints((short)30);headWriteCellStyle.setWriteFont(headWriteFont);headWriteCellStyle.setBorderTop(BorderStyle.MEDIUM);headWriteCellStyle.setBorderBottom(BorderStyle.MEDIUM);headWriteCellStyle.setBorderLeft(BorderStyle.NONE);headWriteCellStyle.setBorderRight(BorderStyle.NONE);headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());//除最后一行以外的表体样式WriteCellStyle bodyStyle = new WriteCellStyle();bodyStyle.setWriteFont(bodyWriteFont);bodyStyle.setVerticalAlignment(VerticalAlignment.CENTER);bodyStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 设置边框bodyStyle.setBorderTop(BorderStyle.NONE);bodyStyle.setBorderLeft(BorderStyle.NONE);bodyStyle.setBorderRight(BorderStyle.NONE);bodyStyle.setBorderBottom(BorderStyle.NONE);//除最后一行以外的表体样式WriteCellStyle oddbodyStyle = new WriteCellStyle();oddbodyStyle.setWriteFont(bodyWriteFont);oddbodyStyle.setVerticalAlignment(VerticalAlignment.CENTER);oddbodyStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);// 设置边框oddbodyStyle.setBorderTop(BorderStyle.NONE);oddbodyStyle.setBorderLeft(BorderStyle.NONE);oddbodyStyle.setBorderRight(BorderStyle.NONE);oddbodyStyle.setBorderBottom(BorderStyle.NONE);oddbodyStyle.setFillForegroundColor(hssfColor.getIndex());oddbodyStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);//最后一行WriteCellStyle lastRow = new WriteCellStyle();//最后一行边框lastRow.setBorderBottom(BorderStyle.MEDIUM);lastRow.setBorderTop(BorderStyle.NONE);lastRow.setBorderLeft(BorderStyle.NONE);lastRow.setBorderRight(BorderStyle.NONE);//字体lastRow.setWriteFont(bodyWriteFont);//居中对齐lastRow.setHorizontalAlignment(HorizontalAlignment.CENTER);lastRow.setVerticalAlignment(VerticalAlignment.CENTER);//最后一行WriteCellStyle oddlastRow = new WriteCellStyle();oddlastRow.setFillForegroundColor(hssfColor.getIndex());//最后一行边框oddlastRow.setBorderBottom(BorderStyle.MEDIUM);oddlastRow.setBorderTop(BorderStyle.NONE);oddlastRow.setBorderLeft(BorderStyle.NONE);oddlastRow.setBorderRight(BorderStyle.NONE);oddlastRow.setFillPatternType(FillPatternType.SOLID_FOREGROUND);//字体oddlastRow.setWriteFont(bodyWriteFont);//居中对齐oddlastRow.setHorizontalAlignment(HorizontalAlignment.CENTER);oddlastRow.setVerticalAlignment(VerticalAlignment.CENTER);//整合表体样式List<WriteCellStyle> preList = new ArrayList<>();int i;for (i = 0; i <data.size()-1; i++) {preList.add(i%2==0?oddbodyStyle:bodyStyle);}preList.add(i%2==0?oddlastRow:lastRow);HorizontalCellStyleStrategy dataTableStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, preList);EasyExcel.write(fileName, ChartItem.class).registerWriteHandler(dataTableStrategy).sheet("模板").doWrite(() -> {// 分页查询数据return data;});return fileName;}

效果图如下

灰色略深了些,可以调个色或者将自定义颜色改成rgba格式改进。

Excel转png格式,需要导一个spire的jar包。

import com.spire.xls.*;
public void exceltostream (String path) throws FileNotFoundException {Workbook wb = new Workbook();wb.loadFromFile(path);//获取工作表Worksheet sheet = wb.getWorksheets().get(0);//调用方法将Excel工作表保存为图片sheet.saveToImage("E://ToImg1.png");}

EasyExcel生成三线表,并转为png格式图片相关推荐

  1. 从多波段的TIFF影像中选择三个波段转为JPG格式图片的方法

    这篇文章的方法适用于tif的像素深度是8位无符号的,如果想了解批量不同像素深度(24位,32位等)TIF图片转JPG格式,请浏览这篇文章 深入探究:TIFF格式的影像如何转jpg (保持色彩不变) 数 ...

  2. 新建论文三线表模板,一键格式刷

    论文三线表模板 写在最前面 ①表设计,新建表格样式 ②三线表上下线 ③三线表标题线 ④设置表格居中 ⑤设置表头格式 容易出错的步骤 写在最前面 论文写完啦,准备调整格式 之前建模也是三线表,但只能基于 ...

  3. PDF矢量图片转为EPS格式图片的方法

    本人写论文,画图一般用的是PPT.在PPT中画好图后再导出为pdf格式文件,然后可以直接在latex中插入图片 最近有一篇论文accept了,上传最终文件时发现投稿系统不接受pdf格式的图片,矢量图只 ...

  4. java png转svg_png格式图片转为svg格式图片

    UML类图关系--继承(泛化).实现.关联.聚合.组合.依赖 在UML类图中,常见的有以下几种关系:  泛化(Generalization),  实现(Realization),关联(Associat ...

  5. 问卷与量表数据分析(SPSS+AMOS)学习笔记(三) : 数据分析工具,三线表的制作

    课程链接:问卷与量表数据分析(SPSS+AMOS) 目录 1. 数据分析工具的种类 2. SPSS窗口介绍 3.  SPSS csv文件导入方式 4. SPSS输出为三线表 4.1 简单描述性统计过程 ...

  6. android webp转换jpg格式,Android使用webp格式图片的步骤

    webp是Android推荐使用的一种图片格式,内存占用很小.使用webp图片是app瘦身和内存优化的很好的方式之一. 下面是webp的使用步骤介绍: 1.下载webp工具,这个google提供给我们 ...

  7. PNM格式图片转换与JAI ImageIO

    问题:png转为pnm格式图片 解决:代码如下 public static void main(String[] args) throws Exception {//tif/tiff/bmp/pbm转 ...

  8. 【项目三、车牌检测+识别项目】一、CCPD车牌数据集转为YOLOv5格式和LPRNet格式

    目录 前言 一.CCPD数据集介绍 二.CCPD数据集下载 三.划分训练集.验证集和测试集 四.车牌检测数据集制作 五.车牌识别数据集制作 六.我的车牌检测+识别数据集 Reference 前言 马上 ...

  9. ChatGPT工作提效之生成开发需求和报价单并转为Excel格式

    ChatGPT工作提效之生成开发需求和报价单并转为Excel格式 一.提出需求 如何撰写百度地图标注开发的需求文档 二.针对性地连续提问 推荐下一下百度地图标注文档的详细需求列表 如何撰写百度地图标注 ...

最新文章

  1. 自己搭建自动化巡检系统(五) 抖动告警
  2. Undo TableSpace ②.回滚段研究
  3. JavaScript常用开发框架总结
  4. python 读取命令行输入_python读取命令行参数的方法
  5. 是逻辑运算符 java_跟我学java编程—Java逻辑运算符
  6. fatal error LNK1104: cannot open file 'libboost_regex-vc100-mt-gd-1_48.lib'
  7. centos7中firewall防火墙命令详解
  8. 如何查看80端口被占用
  9. 外企应了解财税本地化技术(金税三期|批量开票|金税接口|自动开票等技术及理念)
  10. 用css hack解决IE5 IE5.5 IE6 Firefox浏览器兼容性
  11. 华人工程师在美国-从微软高管离职说起
  12. R | failed to load cairo DLL
  13. C++逆序数(奇排列和偶排列的判定)
  14. 外卖cps 赚钱小程序源码
  15. 通过Vim执行Python3脚本遇到的坑
  16. 人人都能当“苍天哥” 手把手教你制作游戏视频
  17. 贝加莱PLC编程总结
  18. google独立站哪家做得好?
  19. an unsupported operation was attempted错误
  20. zerotier使用教程_zerotier简明教程

热门文章

  1. 汉字时钟壁纸/windows电脑壁纸/文字汉字时钟壁纸软件/汉字时钟APP/冷高轮时间汉字动态时钟壁纸
  2. 商品图片放大镜的前端案例
  3. dovecot MySQL配置_dovecot+mysql配置及搭建邮件云服务器方法
  4. 诺基亚总裁:智能手机仍将以Symbian为主
  5. 2016年暑假和传余学长所学到的那点事
  6. ONNX Runtime使用简单介绍
  7. 每天读一点儿APM(PIX)代码之四:minimosd
  8. 光标阅读机OMRAPI
  9. 帝国cms自动生成sitemap地图
  10. 产品、服务和解决方案的区别是什么?