JavaでExcelの円グラフを作成する方法

円グラフはExcelの一般的なグラフツールです。円グラフは、各コンポーネントの全体の比率をグラフで直接表示できるため、抽象的なデータをより迅速かつ直感的に分析して理解するのに役立ちます。
リングチャートは円グラフの変形です。視覚的には、リングチャートは中央部分を削除しますが、その主な機能は、データ間の比率関係を解釈することです。
この記事では、Free Spire.XLS for Javaを使用して、コードを通じてExcelドキュメントに円グラフとリンググラフを作成する方法を紹介します。

**環境構成：**
**1.** [Free Spire.XLS for Java](https://www.e-iceblue.com/Download/xls-for-java-free.html)パッケージをダウンロードして解凍し、libフォルダーのSpire.Xls.jarパッケージを依存関係としてJavaアプリケーションにインポートします。

**2.** Mavenリポジトリから直接JARパッケージをインストールすることもできますpom.xmlファイルを構成するコードは次のとおりです。

```java
<repositories>
        <repository>
            <id>com.e-iceblue</id>
            <name>e-iceblue</name>
            <url>http://repo.e-iceblue.com/nexus/content/groups/public/</url>
        </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.xls.free</artifactId>
        <version>2.2.0</version>
    </dependency>
</dependencies>
```


**円グラフ：**

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

import java.awt.*;

public class CreatePieChart {

    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("2002");
        sheet.getCellRange("A3").setValue("2003");
        sheet.getCellRange("A4").setValue("2004");
        sheet.getCellRange("A5").setValue("2005");

        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.Pie);

        //グラフデータ領域を設定する
        chart.setDataRange(sheet.getCellRange("B2:B5"));
        chart.setSeriesDataFromRange(false);

        //チャートの位置を設定する
        chart.setLeftColumn(3);
        chart.setTopRow(1);
        chart.setRightColumn(11);
        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);

        //文書を保存します
        workbook.saveToFile("piechart.xlsx", ExcelVersion.Version2016);
    }
}
```

![piechart.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/f191c2ec-7426-b362-fc0e-f675f16e4b14.jpeg)


**ドーナツグラフ：**

```java
import com.spire.xls.*;
import com.spire.xls.charts.ChartSerie;
import com.spire.xls.charts.ChartSeries;

import java.awt.*;

public class CreateDoughnutChart {

    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("キューバ");
        sheet.getCellRange("A3").setValue("メキシコ");
        sheet.getCellRange("A4").setValue("ドイツ");
        sheet.getCellRange("A5").setValue("タイ");

        sheet.getCellRange("B1").setValue("売上高");
        sheet.getCellRange("B2").setNumberValue(6000);
        sheet.getCellRange("B3").setNumberValue(8000);
        sheet.getCellRange("B4").setNumberValue(9000);
        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("A1:B5"));
        chart.setSeriesDataFromRange(false);

        //チャートの位置を設定する
        chart.setLeftColumn(3);
        chart.setTopRow(1);
        chart.setRightColumn(11);
        chart.setBottomRow(20);

        //チャートのタイトルを設定します
        chart.setChartTitle("市場占有率");
        chart.getChartTitleArea().isBold(true);
        chart.getChartTitleArea().setSize(12);

        //シリーズの色を設定します
        ChartSeries series = chart.getSeries();
        for (int i = 0 ; i < series.size() ; i++) {
            ChartSerie cs = series.get(i);
            cs.getDataPoints().getDefaultDataPoint().getDataLabels().hasPercentage(true);
        }

        //凡例の位置を設定します
        chart.getLegend().setPosition(LegendPositionType.Top);

        //文書を保存します
        workbook.saveToFile("doughnutchart.xlsx", ExcelVersion.Version2016);
    }
}
```

![doughnutchart.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/2197922d-fd13-559b-952a-ec6e15e4270e.jpeg)