当前位置: 首页 > news >正文

poi生成excel饼图设置颜色

 效果

实现 

import com.gideon.entity.ChartPosition;
import com.gideon.entity.LineChart;
import com.gideon.entity.PieChart;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xddf.usermodel.PresetColor;
import org.apache.poi.xddf.usermodel.XDDFColor;
import org.apache.poi.xddf.usermodel.XDDFSolidFillProperties;
import org.apache.poi.xddf.usermodel.chart.*;
import org.apache.poi.xssf.usermodel.*;
import org.openxmlformats.schemas.drawingml.x2006.chart.*;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class ChartUtils {private static XSSFChart createDrawingPatriarch(XSSFSheet sheet, ChartPosition chartPosition, String chartTitle) {//创建一个画布XSSFDrawing drawing = sheet.createDrawingPatriarch();//前偏移量四个默认0XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, chartPosition.getCol1(), chartPosition.getRow1(), chartPosition.getCol2(), chartPosition.getRow2());//创建一个chart对象XSSFChart chart = drawing.createChart(anchor);//标题chart.setTitleText(chartTitle);//标题是否覆盖图表chart.setTitleOverlay(false);return chart;}/*** 创建饼图** @param sheet 图表* @see com.gideon.entity.PieChart  饼图数据的封装* @see com.gideon.entity.ChartPosition 饼图的坐标位置*/public static void createPie(XSSFSheet sheet, ChartPosition chartPosition, PieChart pieChart) {String titleName = pieChart.getTitleName();List<String> titleList = pieChart.getTitleList();List<Integer> dataList = pieChart.getDataList();XSSFChart chart = createDrawingPatriarch(sheet, chartPosition, titleName);//图例位置XDDFChartLegend legend = chart.getOrAddLegend();legend.setPosition(LegendPosition.BOTTOM);//分类轴标数据XDDFDataSource<String> countries = XDDFDataSourcesFactory.fromArray(titleList.toArray(new String[]{}));XDDFNumericalDataSource<Integer> values = XDDFDataSourcesFactory.fromArray(dataList.toArray(new Integer[]{}));XDDFChartData data = chart.createData(ChartTypes.PIE, null, null);//设置为可变颜色data.setVaryColors(true);//图表加载数据data.addSeries(countries, values);// 饼图设置颜色CTPlotArea plotArea = chart.getCTChart().getPlotArea();CTPieSer ser = plotArea.getPieChartArray(0).getSerArray(0);CTDPt dpt = ser.addNewDPt();List<byte[]> bytes = new ArrayList<>();// 设置RGB颜色bytes.add(new byte[]{(byte) 51, (byte) 208, (byte) 189});bytes.add(new byte[]{(byte) 254, (byte) 190, (byte) 107});bytes.add(new byte[]{(byte) 254, (byte) 112, (byte) 110});bytes.add(new byte[]{(byte) 81, (byte) 146, (byte) 255});for (int i = 0; i < 4; i++) {dpt.addNewIdx().setVal(i);dpt.addNewSpPr().addNewSolidFill().addNewSrgbClr().setVal(bytes.get(i));dpt = ser.addNewDPt();}// 绘制chart.plot(data);CTDLbls ctdLbls = chart.getCTChart().getPlotArea().getPieChartArray(0).getSerArray(0).addNewDLbls();ctdLbls.addNewShowVal().setVal(false);ctdLbls.addNewShowLegendKey().setVal(false);// 百分比ctdLbls.addNewShowSerName().setVal(false);ctdLbls.addNewShowPercent().setVal(true);// 类别名称ctdLbls.addNewShowCatName().setVal(false);// 引导线ctdLbls.addNewShowLeaderLines().setVal(false);// 数据标签内ctdLbls.addNewDLblPos().setVal(STDLblPos.Enum.forString("inEnd"));}
}

http://www.lryc.cn/news/94109.html

相关文章:

  • 多版本管理node.js
  • 【深入浅出 Spring Security(七)】RememberMe的实现原理详讲
  • Cesium 实战 - 使用 gltf-vscode 查看、预览以及编辑 glTF 和 GLB 模型
  • Python自动化测试框架:Pytest和Unittest的区别
  • 考研算法29天:希尔排序 【希尔排序】
  • RN 学习小记之使用 Expo 创建项目
  • python爬虫从入门到精通
  • 从0到1精通自动化,接口自动化测试——数据驱动DDT实战
  • 【微服务】springboot整合swagger多种模式使用详解
  • AI 绘画(1):生成一个图片的标准流程
  • CPU、内存、缓存的关系
  • AI黑客松近期比赛清单;36氪AI淘宝店盈利复盘;GitHub Copilot官方最佳实践;AI在HR领域的应用探索 | ShowMeAI日报
  • 想要让视频素材格式快速调整转换的方法分享
  • 面向对象分析与设计 UML2.0 学习笔记
  • [数据库系统] 五、数据增删改
  • docker私有注册表创建和使用
  • 用OpenCV进行OCR字符分割
  • MyCat Docker 搭建与测试
  • 车载通讯USB开发,增强车内娱乐体验
  • js的一些小技巧
  • Springboot Mybatis 自定义顺序排序查询,指定某个字段
  • 期刊会议审稿意见
  • Java类加载机制:从字节码到对象的奇妙之旅
  • 代码随想录第一天|二分法、双指针
  • Flink中KeyedStateStore实现--怎么做到一个Key对应一个State
  • flex: 0 0 100%;
  • IMX6ULL系统移植篇-镜像烧写方法
  • 【Android】实现雷达扫描效果,使用自定义View来绘制雷达扫描动画
  • 小程序 - 文件预览
  • 将String类型的证书转换为X509Certificate类型对象,读取证书链文件内容,完成证书链校验