Java 在Excel中添加分离型饼图、环形图的方法

 更新时间:2020年12月03日 08:40:24   作者:E-iceblue  
这篇文章主要介绍了Java 在Excel中添加分离型饼图、环形图的方法,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下

一、概述

Excel中可支持多种不同类型的图表,本文介绍如何绘制分离型饼图和环形图。其中,分离型饼图的绘制可分为整体分离型(即设置饼图分离程度)和局部分离(即设置点爆炸型值)两种情况。下面将以Java程序代码介绍如何在Excel中实现以上图形。

二、程序环境

  • Spire.Xls.jar
  • Jdk 1.8.0(版本>=1.6.0即可)
  • IDEA

注:Jar使用的是Free Spire.XLS for Java(免费版)中的Spire.Xls.jar。编辑代码前,导入jar到Java程序,两种方法可导入(任选其一即可):

1. 下载jar包,解压导入lib文件夹下的jar到Java程序;

2. maven程序中配置pom.xml文件,指定spire的maven路径及依赖,参考如下:

<repositories>
  <repository>
    <id>com.e-iceblue</id>
    <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
   </repository>
</repositories>
<dependencies>
<dependency>
    <groupId>e-iceblue</groupId>
 <artifactId>spire.xls.free</artifactId>
 <version>3.9.1</version>
</dependency>
</dependencies>

配置完成后,导入jar到程序。 

三、Java代码

1. 分离型饼图

import com.spire.xls.*;
import com.spire.xls.charts.ChartSerie;

import java.awt.*;

public class ExplodedPieChart {
  public static void main(String[] args) {
    //创建Workbook对象
    Workbook workbook = new Workbook();

    //获取第一个工作表
    Worksheet sheet = workbook.getWorksheets().get(0);

    //将图表数据写入工作表
    sheet.getCellRange("A1").setValue("年份");
    sheet.getCellRange("A2").setValue("2017");
    sheet.getCellRange("A3").setValue("2018");
    sheet.getCellRange("A4").setValue("2019");
    sheet.getCellRange("A5").setValue("2020");

    sheet.getCellRange("B1").setValue("销售额");
    sheet.getCellRange("B2").setNumberValue(4000);
    sheet.getCellRange("B3").setNumberValue(6000);
    sheet.getCellRange("B4").setNumberValue(7000);
    sheet.getCellRange("B5").setNumberValue(8500);

    //设置单元格样式
    sheet.getCellRange("A1:B1").setRowHeight(15);
    sheet.getCellRange("A1:B1").getCellStyle().setColor(Color.darkGray);
    sheet.getCellRange("A1:B1").getCellStyle().getExcelFont().setColor(Color.white);
    sheet.getCellRange("A1:B1").getCellStyle().setVerticalAlignment(VerticalAlignType.Center);
    sheet.getCellRange("A1:B1").getCellStyle().setHorizontalAlignment(HorizontalAlignType.Center);
    sheet.getCellRange("B2:C5").getCellStyle().setNumberFormat("\"¥\"#,##0");

    //添加整体分离型饼图
    Chart piechart = sheet.getCharts().add(ExcelChartType.Pie);
    //设置图表数据区域
    piechart.setDataRange(sheet.getCellRange("B2:B5"));
    piechart.setSeriesDataFromRange(false);
    //设置图表位置
    piechart.setLeftColumn(4);
    piechart.setTopRow(1);
    piechart.setRightColumn(10);
    piechart.setBottomRow(20);
    //设置图表标题
    piechart.setChartTitle("年销售额");
    piechart.getChartTitleArea().isBold(true);
    piechart.getChartTitleArea().setSize(12);
    //设置系列标签
    ChartSerie cs = piechart.getSeries().get(0);
    cs.setCategoryLabels(sheet.getCellRange("A2:A5"));
    cs.setValues(sheet.getCellRange("B2:B5"));
    cs.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true);
    piechart.getPlotArea().getFill().setVisible(false);

    //设置饼图整体分离
    for (int i = 0; i < piechart.getSeries().getCount(); i++)
    {
      piechart.getSeries().get(i).getDataFormat().setPercent(20);
    }


    //添加局部分离型饼图
    Chart piechart1 = sheet.getCharts().add(ExcelChartType.Pie);
    piechart1.setDataRange(sheet.getCellRange("B2:B5"));
    piechart1.setSeriesDataFromRange(false);
    piechart1.setLeftColumn(11);
    piechart1.setTopRow(1);
    piechart1.setRightColumn(17);
    piechart1.setBottomRow(20);
    piechart1.setChartTitle("年销售额");
    piechart1.getChartTitleArea().isBold(true);
    piechart1.getChartTitleArea().setSize(12);
    ChartSerie cs1 = piechart1.getSeries().get(0);
    cs1.setCategoryLabels(sheet.getCellRange("A2:A5"));
    cs1.setValues(sheet.getCellRange("B2:B5"));
    cs1.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true);
    piechart1.getPlotArea().getFill().setVisible(false);
    //设置饼图局部分离
    piechart1.getSeries().get(0).getDataPoints().get(1).getDataFormat().setPercent(20);

    //保存文档
    workbook.saveToFile("ExplodedPieChart.xlsx", ExcelVersion.Version2016);
    workbook.dispose();
  }
}

2. 分离型环形图

import com.spire.xls.*;
import com.spire.xls.charts.ChartSerie;

import java.awt.*;

public class ExplodedDoughnutChart {
  public static void main(String[] args) {
    //创建Workbook对象
    Workbook workbook = new Workbook();

    //获取第一个工作表
    Worksheet sheet = workbook.getWorksheets().get(0);

    //将图表数据写入工作表
    sheet.getCellRange("A1").setValue("年份");
    sheet.getCellRange("A2").setValue("2017");
    sheet.getCellRange("A3").setValue("2018");
    sheet.getCellRange("A4").setValue("2019");
    sheet.getCellRange("A5").setValue("2020");
    sheet.getCellRange("B1").setValue("销售额");
    sheet.getCellRange("B2").setNumberValue(4000);
    sheet.getCellRange("B3").setNumberValue(6000);
    sheet.getCellRange("B4").setNumberValue(7000);
    sheet.getCellRange("B5").setNumberValue(8500);

    //设置单元格样式
    sheet.getCellRange("A1:B1").setRowHeight(15);
    sheet.getCellRange("A1:B1").getCellStyle().setColor(Color.darkGray);
    sheet.getCellRange("A1:B1").getCellStyle().getExcelFont().setColor(Color.white);
    sheet.getCellRange("A1:B1").getCellStyle().setVerticalAlignment(VerticalAlignType.Center);
    sheet.getCellRange("A1:B1").getCellStyle().setHorizontalAlignment(HorizontalAlignType.Center);
    sheet.getCellRange("B2:C5").getCellStyle().setNumberFormat("\"¥\"#,##0");

    //添加环形图
    Chart chart = sheet.getCharts().add(ExcelChartType.Doughnut);
    //设置图表数据区域
    chart.setDataRange(sheet.getCellRange("B2:B5"));
    chart.setSeriesDataFromRange(false);
    //设置图表位置
    chart.setLeftColumn(4);
    chart.setTopRow(1);
    chart.setRightColumn(10);
    chart.setBottomRow(20);
    //设置图表标题
    chart.setChartTitle("年销售额");
    chart.getChartTitleArea().isBold(true);
    chart.getChartTitleArea().setSize(12);

    //设置系列标签
    ChartSerie cs = chart.getSeries().get(0);
    cs.setCategoryLabels(sheet.getCellRange("A2:A5"));
    cs.setValues(sheet.getCellRange("B2:B5"));
    cs.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true);
    chart.getPlotArea().getFill().setVisible(false);



    //添加分离型环形图
    Chart chart1 = sheet.getCharts().add(ExcelChartType.DoughnutExploded);
    chart1.setDataRange(sheet.getCellRange("B2:B5"));
    chart1.setSeriesDataFromRange(false);
    chart1.setLeftColumn(11);
    chart1.setTopRow(1);
    chart1.setRightColumn(17);
    chart1.setBottomRow(20);
    chart1.setChartTitle("年销售额");
    chart1.getChartTitleArea().isBold(true);
    chart1.getChartTitleArea().setSize(12);
    ChartSerie cs1 = chart1.getSeries().get(0);
    cs1.setCategoryLabels(sheet.getCellRange("A2:A5"));
    cs1.setValues(sheet.getCellRange("B2:B5"));
    cs1.getDataPoints().getDefaultDataPoint().getDataLabels().hasValue(true);
    chart1.getPlotArea().getFill().setVisible(false);

    //保存文档
    workbook.saveToFile("ExplodedDoughnutChart.xlsx",FileFormat.Version2013);
    workbook.dispose();
  }
}

以上就是Java 在Excel中添加分离型饼图、环形图的方法的详细内容,更多关于Java excel添加图表的资料请关注脚本之家其它相关文章!

相关文章

  • Java图形界面之JFrame,JLabel,JButton详解

    Java图形界面之JFrame,JLabel,JButton详解

    这篇文章主要介绍了Java图形界面之JFrame、JLabel、JButton详解,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Java hutool List集合对象拷贝示例代码

    Java hutool List集合对象拷贝示例代码

    这篇文章主要介绍了Java hutool List集合对象拷贝的相关资料,文章还分享了在实现过程中遇到的一些问题,并强调了阅读源码和正确配置CopyOptions的重要性,需要的朋友可以参考下
    2024-12-12
  • java线程的中断和同步问题的实现

    java线程的中断和同步问题的实现

    本文主要介绍了java线程的中断和同步问题的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • Java Spring boot日期和时间统一设置三种方法

    Java Spring boot日期和时间统一设置三种方法

    时间和日期的统一设置在项目中经常是会遇到的,下面这篇文章主要给大家介绍了关于Java Spring boot日期和时间统一设置的三种方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • java中如何实现对类的对象进行排序

    java中如何实现对类的对象进行排序

    在本篇文章里小编给各位整理一篇关于java中如何实现对类的对象进行排序知识点内容,有兴趣的朋友们可以学习下。
    2020-02-02
  • 关于Poi读取Excel引发内存溢出问题的解决方法

    关于Poi读取Excel引发内存溢出问题的解决方法

    这篇文章主要给大家介绍了关于Poi读取Excel引发内存溢出问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • Serializable接口的作用_动力节点Java学院整理

    Serializable接口的作用_动力节点Java学院整理

    这篇文章主要为大家详细介绍了java中Serializable接口的作用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • MyBatis验证多级缓存及 Cache Aside 模式的应用小结

    MyBatis验证多级缓存及 Cache Aside 模式的应用小结

    本文介绍了MyBatis的多级缓存机制,包括本地缓存和全局缓存,并通过Spock测试框架验证了多级缓存的实现,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • java利用StringTokenizer分割字符串的实现

    java利用StringTokenizer分割字符串的实现

    利用java.util.StringTokenizer的方法,可以将一个字符串拆分为一系列的标记,本文就来介绍一下java利用StringTokenizer分割字符串的实现,感兴趣的可以了解一下
    2023-10-10
  • 详解Java中synchronized关键字的死锁和内存占用问题

    详解Java中synchronized关键字的死锁和内存占用问题

    Java的synchronized关键字用来进行线程同步操作,然而这在使用中经常会遇到一些问题,这里我们就来详解Java中synchronized关键字的死锁和内存占用问题:
    2016-06-06

最新评论