EasyExcel生成三线表,并转为png格式图片
要做生成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格式图片相关推荐
- 从多波段的TIFF影像中选择三个波段转为JPG格式图片的方法
这篇文章的方法适用于tif的像素深度是8位无符号的,如果想了解批量不同像素深度(24位,32位等)TIF图片转JPG格式,请浏览这篇文章 深入探究:TIFF格式的影像如何转jpg (保持色彩不变) 数 ...
- 新建论文三线表模板,一键格式刷
论文三线表模板 写在最前面 ①表设计,新建表格样式 ②三线表上下线 ③三线表标题线 ④设置表格居中 ⑤设置表头格式 容易出错的步骤 写在最前面 论文写完啦,准备调整格式 之前建模也是三线表,但只能基于 ...
- PDF矢量图片转为EPS格式图片的方法
本人写论文,画图一般用的是PPT.在PPT中画好图后再导出为pdf格式文件,然后可以直接在latex中插入图片 最近有一篇论文accept了,上传最终文件时发现投稿系统不接受pdf格式的图片,矢量图只 ...
- java png转svg_png格式图片转为svg格式图片
UML类图关系--继承(泛化).实现.关联.聚合.组合.依赖 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Associat ...
- 问卷与量表数据分析(SPSS+AMOS)学习笔记(三) : 数据分析工具,三线表的制作
课程链接:问卷与量表数据分析(SPSS+AMOS) 目录 1. 数据分析工具的种类 2. SPSS窗口介绍 3. SPSS csv文件导入方式 4. SPSS输出为三线表 4.1 简单描述性统计过程 ...
- android webp转换jpg格式,Android使用webp格式图片的步骤
webp是Android推荐使用的一种图片格式,内存占用很小.使用webp图片是app瘦身和内存优化的很好的方式之一. 下面是webp的使用步骤介绍: 1.下载webp工具,这个google提供给我们 ...
- PNM格式图片转换与JAI ImageIO
问题:png转为pnm格式图片 解决:代码如下 public static void main(String[] args) throws Exception {//tif/tiff/bmp/pbm转 ...
- 【项目三、车牌检测+识别项目】一、CCPD车牌数据集转为YOLOv5格式和LPRNet格式
目录 前言 一.CCPD数据集介绍 二.CCPD数据集下载 三.划分训练集.验证集和测试集 四.车牌检测数据集制作 五.车牌识别数据集制作 六.我的车牌检测+识别数据集 Reference 前言 马上 ...
- ChatGPT工作提效之生成开发需求和报价单并转为Excel格式
ChatGPT工作提效之生成开发需求和报价单并转为Excel格式 一.提出需求 如何撰写百度地图标注开发的需求文档 二.针对性地连续提问 推荐下一下百度地图标注文档的详细需求列表 如何撰写百度地图标注 ...
最新文章
- 自己搭建自动化巡检系统(五) 抖动告警
- Undo TableSpace ②.回滚段研究
- JavaScript常用开发框架总结
- python 读取命令行输入_python读取命令行参数的方法
- 是逻辑运算符 java_跟我学java编程—Java逻辑运算符
- fatal error LNK1104: cannot open file 'libboost_regex-vc100-mt-gd-1_48.lib'
- centos7中firewall防火墙命令详解
- 如何查看80端口被占用
- 外企应了解财税本地化技术(金税三期|批量开票|金税接口|自动开票等技术及理念)
- 用css hack解决IE5 IE5.5 IE6 Firefox浏览器兼容性
- 华人工程师在美国-从微软高管离职说起
- R | failed to load cairo DLL
- C++逆序数(奇排列和偶排列的判定)
- 外卖cps 赚钱小程序源码
- 通过Vim执行Python3脚本遇到的坑
- 人人都能当“苍天哥” 手把手教你制作游戏视频
- 贝加莱PLC编程总结
- google独立站哪家做得好?
- an unsupported operation was attempted错误
- zerotier使用教程_zerotier简明教程