Java 在Excel中添加分離型餅圖、環(huán)形圖的方法
一、概述
Excel中可支持多種不同類型的圖表,本文介紹如何繪制分離型餅圖和環(huán)形圖。其中,分離型餅圖的繪制可分為整體分離型(即設(shè)置餅圖分離程度)和局部分離(即設(shè)置點(diǎn)爆炸型值)兩種情況。下面將以Java程序代碼介紹如何在Excel中實(shí)現(xiàn)以上圖形。
二、程序環(huán)境
- Spire.Xls.jar
- Jdk 1.8.0(版本>=1.6.0即可)
- IDEA
注:Jar使用的是Free Spire.XLS for Java(免費(fèi)版)中的Spire.Xls.jar。編輯代碼前,導(dǎo)入jar到Java程序,兩種方法可導(dǎo)入(任選其一即可):
1. 下載jar包,解壓導(dǎo)入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>
配置完成后,導(dǎo)入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) {
//創(chuàng)建Workbook對(duì)象
Workbook workbook = new Workbook();
//獲取第一個(gè)工作表
Worksheet sheet = workbook.getWorksheets().get(0);
//將圖表數(shù)據(jù)寫(xiě)入工作表
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);
//設(shè)置單元格樣式
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);
//設(shè)置圖表數(shù)據(jù)區(qū)域
piechart.setDataRange(sheet.getCellRange("B2:B5"));
piechart.setSeriesDataFromRange(false);
//設(shè)置圖表位置
piechart.setLeftColumn(4);
piechart.setTopRow(1);
piechart.setRightColumn(10);
piechart.setBottomRow(20);
//設(shè)置圖表標(biāo)題
piechart.setChartTitle("年銷售額");
piechart.getChartTitleArea().isBold(true);
piechart.getChartTitleArea().setSize(12);
//設(shè)置系列標(biāo)簽
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);
//設(shè)置餅圖整體分離
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);
//設(shè)置餅圖局部分離
piechart1.getSeries().get(0).getDataPoints().get(1).getDataFormat().setPercent(20);
//保存文檔
workbook.saveToFile("ExplodedPieChart.xlsx", ExcelVersion.Version2016);
workbook.dispose();
}
}

2. 分離型環(huán)形圖
import com.spire.xls.*;
import com.spire.xls.charts.ChartSerie;
import java.awt.*;
public class ExplodedDoughnutChart {
public static void main(String[] args) {
//創(chuàng)建Workbook對(duì)象
Workbook workbook = new Workbook();
//獲取第一個(gè)工作表
Worksheet sheet = workbook.getWorksheets().get(0);
//將圖表數(shù)據(jù)寫(xiě)入工作表
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);
//設(shè)置單元格樣式
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");
//添加環(huán)形圖
Chart chart = sheet.getCharts().add(ExcelChartType.Doughnut);
//設(shè)置圖表數(shù)據(jù)區(qū)域
chart.setDataRange(sheet.getCellRange("B2:B5"));
chart.setSeriesDataFromRange(false);
//設(shè)置圖表位置
chart.setLeftColumn(4);
chart.setTopRow(1);
chart.setRightColumn(10);
chart.setBottomRow(20);
//設(shè)置圖表標(biāo)題
chart.setChartTitle("年銷售額");
chart.getChartTitleArea().isBold(true);
chart.getChartTitleArea().setSize(12);
//設(shè)置系列標(biāo)簽
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);
//添加分離型環(huán)形圖
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中添加分離型餅圖、環(huán)形圖的方法的詳細(xì)內(nèi)容,更多關(guān)于Java excel添加圖表的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Java中利用Alibaba開(kāi)源技術(shù)EasyExcel來(lái)操作Excel表的示例代碼
- Java 設(shè)置Excel條件格式示例代碼(高亮條件值、應(yīng)用單元格值/公式/數(shù)據(jù)條等類型)
- Java中Easypoi實(shí)現(xiàn)excel多sheet表導(dǎo)入導(dǎo)出功能
- Java利用POI讀寫(xiě)Excel文件工具類
- java讀取簡(jiǎn)單excel通用工具類
- java讀取excel表格的方法
- java 使用poi 導(dǎo)入Excel數(shù)據(jù)到數(shù)據(jù)庫(kù)的步驟
- 基于Java8實(shí)現(xiàn)提高Excel讀寫(xiě)效率
- vue通過(guò)接口直接下載java生成好的Excel表格案例
- Java 導(dǎo)出excel進(jìn)行換行的案例
- Java 如何快速,優(yōu)雅的實(shí)現(xiàn)導(dǎo)出Excel
相關(guān)文章
Java圖形界面之JFrame,JLabel,JButton詳解
這篇文章主要介紹了Java圖形界面之JFrame、JLabel、JButton詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
Java?hutool?List集合對(duì)象拷貝示例代碼
這篇文章主要介紹了Java?hutool?List集合對(duì)象拷貝的相關(guān)資料,文章還分享了在實(shí)現(xiàn)過(guò)程中遇到的一些問(wèn)題,并強(qiáng)調(diào)了閱讀源碼和正確配置CopyOptions的重要性,需要的朋友可以參考下2024-12-12
java線程的中斷和同步問(wèn)題的實(shí)現(xiàn)
本文主要介紹了java線程的中斷和同步問(wèn)題的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
Java?Spring?boot日期和時(shí)間統(tǒng)一設(shè)置三種方法
時(shí)間和日期的統(tǒng)一設(shè)置在項(xiàng)目中經(jīng)常是會(huì)遇到的,下面這篇文章主要給大家介紹了關(guān)于Java?Spring?boot日期和時(shí)間統(tǒng)一設(shè)置的三種方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08
java中如何實(shí)現(xiàn)對(duì)類的對(duì)象進(jìn)行排序
在本篇文章里小編給各位整理一篇關(guān)于java中如何實(shí)現(xiàn)對(duì)類的對(duì)象進(jìn)行排序知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2020-02-02
關(guān)于Poi讀取Excel引發(fā)內(nèi)存溢出問(wèn)題的解決方法
這篇文章主要給大家介紹了關(guān)于Poi讀取Excel引發(fā)內(nèi)存溢出問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
Serializable接口的作用_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了java中Serializable接口的作用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
MyBatis驗(yàn)證多級(jí)緩存及 Cache Aside 模式的應(yīng)用小結(jié)
本文介紹了MyBatis的多級(jí)緩存機(jī)制,包括本地緩存和全局緩存,并通過(guò)Spock測(cè)試框架驗(yàn)證了多級(jí)緩存的實(shí)現(xiàn),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-12-12
java利用StringTokenizer分割字符串的實(shí)現(xiàn)
利用java.util.StringTokenizer的方法,可以將一個(gè)字符串拆分為一系列的標(biāo)記,本文就來(lái)介紹一下java利用StringTokenizer分割字符串的實(shí)現(xiàn),感興趣的可以了解一下2023-10-10
詳解Java中synchronized關(guān)鍵字的死鎖和內(nèi)存占用問(wèn)題
Java的synchronized關(guān)鍵字用來(lái)進(jìn)行線程同步操作,然而這在使用中經(jīng)常會(huì)遇到一些問(wèn)題,這里我們就來(lái)詳解Java中synchronized關(guān)鍵字的死鎖和內(nèi)存占用問(wèn)題:2016-06-06

