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

一、概述

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添加图表的资料请关注我们其它相关文章!

(0)

相关推荐

  • Java实现Excel批量导入数据

    Excel的批量导入是很常见的功能,这里采用 Jxl实现,数据量或样式要求较高可以采用 poi 框架环境:Spring + SpringMvc(注解实现) 1.首先导入依赖jar包 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.6.10</version> </depe

  • React获取Java后台文件流并下载Excel文件流程解析

    记录使用blob对象接收java后台文件流并下载为xlsx格式的详细过程,关键部分代码如下. 首先在java后台中设置response中的参数: public void exportExcel(HttpServletResponse response, String fileName, String sheetName, List<String> titleRow, List<List<String>> dataRows) { OutputStream out = nu

  • Java中easypoi导入excel文件列名相同的处理方案

    Easypoi是什么 Easypoi 功能如同名字easy,主打的功能就是容易,让一个没接触过poi的人员,就可以方便的写出Excel导出.Excel模板导出.Excel导入.Word模板导出,通过简单的注解和模板语言(熟悉的表达式fe语法),完成以前复杂的写法 开源地址:https://gitee.com/lemur/easypoi 独特的功能 基于注解的导入导出,修改注解就可以修改Excel 支持常用的样式自定义 基于map可以灵活定义的表头字段 支持一堆多的导出,导入 支持模板的导出,一些

  • java实现批量导入Excel表格数据到数据库

    本文是基于Apache poi类实现的批量导入读取Excel文件,所以要先引入Apache poi的依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.1</version> </dependency> <dependency> <groupId>org.a

  • Java 导出excel进行换行的案例

    如下所示: String.valueOf((char)10) 在导出excel 的时候,如果原始文字中含有 \n 字符, 如果把 \n 替换为<br/>,excel不会识别成换行符 excel 认可 char(10) 作为换行符: scanSendCoupeMg.getRuleDesc().replace("\n", String.valueOf((char)10)); scanSendCoupeMg.getRuleDesc().replace("<br/&

  • Java Poi 在Excel中输出特殊符号的实现方法

    最近的工作围绕报表导出,并没有集成相应的报表插件,只是使用了Poi.其中有一个需求,Excel中导出特殊符号,如√.×等.在网上找寻了许久,没有相关资料,故记录分享一下. 思考良久,走了不少弯路,最后受 System.out.println() 启发,实现方式真的超级简单.每一个特殊符号,都对应一个Unicode编码,我们只需要将特定的符号,转变成Unicode编码,进行输出即可. 相应的代码输出: cell.setCellValue("\u221A"); 另附自己编写的Excel工具

  • Java实现excel大数据量导入

    本文实例为大家分享了Java实现excel大数据量导入的具体代码,供大家参考,具体内容如下 情景分析: 通常我们通过poi读取excel文件时,若在用户模式下,由于数据量较大.Sheet较多,很容易出现内存溢出的情况 用户模式读取excel的典型代码如下: FileInputStream file = new FileInputStream("c:\\test.xlsx"); Workbook wb=new XSSFWorkbook(file); 而03版(xls)excel文件每个s

  • Java使用easyExcel导出excel数据案例

    easyExcel简介: Java领域解析.生成Excel比较有名的框架有Apache poi.jxl等.但他们都存在一个严重的问题就是非常的耗内存.如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc. easyExcel是阿里巴巴开源的一个excel处理框架,以使用简单.节省内存著称. easyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理 easyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据

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

    一.概述 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程序,两种方法可导

  • Java 在PPT中添加文本和图片超链接的实现方法

    在文档中添加超链接,可以快速从当前文档跳转至指定的网页或打开指定的外部文件.前文中我们介绍过如何使用Java程序来为Word文档和Excel工作表添加超链接.本文将演示如何在PPT中添加文本和图片超链接. 使用工具:Free Spire.Presentation for Java(免费版)Jar文件获取及导入: 方法1:通过官网下载获取jar包.解压后将lib文件夹下的Spire.Presentation.jar文件导入Java程序.(如下图) 方法2:通过maven仓库安装导入.具体安装教程参

  • Java在Excel中添加水印的实现(单一水印、平铺水印)

    在Excel中没有直接添加水印的功能,但依旧可以通过一定方式来实现类似水印效果.本文通过Java程序代码介绍具体实现方法.可添加单一水印效果,即水印是以单个文本字样来呈现:也可添加多个平铺水印效果,即水印是以多个文本字样来页面中平铺.详细内容见下文. 程序环境: 测试文档:Office Excel 2013 编译环境:IntelliJ IDEA 2018 JDK版本:1.8.0 Excel库:Java系列free spire.xls.jar 3.9.1 1.单一水印效果 import com.s

  • Java 在PDF中添加条形码的两种方法

    条形码,是由宽度不等的多个黑条和空白所组成,用以表达一组信息的图形标识符.通过给文档添加条形码,可以直观,快捷地访问和分享一些重要的信息.本文就将通过使用Java程序来演示如何在PDF文档中添加Codebar.Code128A和Code39条形码.除此之外,还可支持创建Code11.Code128B.Code32.Code39 Extended .Code93和Code93 Extended条形码. 使用工具:Free Spire.PDF for Java(免费版) Jar文件获取及导入: 方法

  • Java 在PDF中添加页面跳转按钮功能(代码演示)

    在PDF 中可通过按钮来添加动作跳转到指定页面,包括跳转到文档首页.文档末页.跳转到上一页.下一页.或跳转到指定页面等.下面将通过java代码来演示如何添加具有以上几种功能的按钮. 使用工具: Free Spire.PDF for Java (免费版) IntelliJ IDEA Jar文件获取及导入: 方法1:通过官网下载jar文件包.下载后,解压文件,并将lib文件夹下的Spire.Pdf.jar文件导入java程序.参考如下导入效果: 方法2: 可通过maven仓库安装导入. Java 代

  • Java在Excel中创建多级分组、折叠或展开分组的实现

    本文介绍通过Java程序在Excel创建分组的方法,可对行或列分组进行分组并设置明细数据是否展开或折叠.设置数据分组并展开或折叠时,可通过以下方法: 方法一: 通过方法sheet.groupByRows(int firstRow, int lastRow, boolean isCollapsed)设置行分组:通过方法sheet.groupByColumns(int firstColumnm, int lastColumn, boolean isCollapsed)设置列分组. 方法二: 通过方法

  • Java 在PDF中添加骑缝章示例解析

    骑缝章是用于往来业务合同,以确保合同真实.有效的印章加盖方法,是一种防范风险的重要方式.在Java程序中,可以通过使用工具来辅助加盖这种骑缝章. 工具:Free Spire.PDF for Java (免费版) 工具获取及jar文件导入: 方式1:通过官网下载jar包,并解压,手动导入lib文件夹下的Spire.Pdf.jar文件. 方式2:通过创建Maven程序,在pom.xml中配置maven仓库路径并指定Free Spire.PDF for Java 的依赖,配置完成后,在IDEA中,点击

  • Java在Word中添加多行图片水印

    Word中设置水印效果时,不论是文本水印或者是图片水印都只能添加单个文字或者图片到Word页面,效果比较单一,本文通过Java代码示例介绍如何在页面中添加多行图片水印效果,即水印效果以多个图片平铺到页面.(添加多行文字水印效果,可以查看这篇文章中的方法) 程序环境:使用spire.doc.jar,版本:3.9.0 Java代码: import com.spire.doc.*; import com.spire.doc.documents.Paragraph; import com.spire.d

  • Java获取Excel中图片所在的行和列坐标位置

    目录 前言 获取图片所在行.列位置 前言 本文以Java代码示例展示如何来获取Excel工作表中图片的坐标位置.这里的坐标位置是指图片左上角顶点所在的单元格行和列位置,横坐标即顶点所在的第几列.纵坐标即顶点所在的第几行.下面是获取图片位置的详细方法及步骤. 程序环境: 按照如下方法来引用Spire.Xls.jar 版本:5.1.0 方法1:将Free Spire.XLS for Java​包下载到本地,解压,找到lib文件夹下的Spire.Xls.jar文件.然后在IDEA中打开“Project

  • Java在PowerPoint中添加上标和下标的实现方法

    目录 前言 程序环境配置 安装Spire.Presentation for Java 添加上标和下标 代码实现 前言 当我们在演示文稿中添加商标.版权或其他符号时,我们可能希望该符号出现在某个文本的上方或下方.在Microsoft PowerPoint中,我们可以通过对符号应用上标或下标格式来实现这种效果.在这篇文章中,我们将演示如何在Java中使用Spire.Presentation for Java以编程的方式实现这一任务. 程序环境配置 安装Spire.Presentation for J

随机推荐