Javaを使用してExcelの図形を追加、読み取り、削除する方法

この記事では、次のようなJavaプログラムを使用してExcelで図形（グラフィックス）を操作する方法を紹介します。

1.図形を追加します（図形の種類/位置/サイズの設定、図形の塗りつぶし（単色/グラデーションの色/テクスチャ/画像の塗りつぶし）、図形の表示または非表示、図形の傾斜角度、図形へのテキストの追加、図形の影など）

2.図形からテキストと画像を抽出します

3.図形を削除します（指定された図形またはすべての図形を削除します）

ツール：Spire.XLS for Java

Jarファイルの取得とインポート：[公式Webサイト](https://www.e-iceblue.com/Download/xls-for-java.html)またはMavenからダウンロードしてインポートします。インポート結果は次のとおりです。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/56a15d66-377e-e3c9-71d8-8e629450aa64.png)

## Javaコード一覧

### 【例1】図形を追加する

```
import com.spire.xls.*;
import com.spire.xls.core.IPrstGeomShape;

import java.awt.*;

public class AddShape {
    public static void main(String[] args) {
        //テストドキュメントをロードする
        Workbook wb = new Workbook();
        wb.loadFromFile("test.xlsx");

        //ワークシートを取得する
        Worksheet sheet = wb.getWorksheets().get(0);

        //楕円形を追加する
        IPrstGeomShape ellipse = sheet.getPrstGeomShapes().addPrstGeomShape(3,4,125,200,PrstGeomShapeType.Ellipse);
        ellipse.getFill().setFillType(ShapeFillType.SolidColor);//単色塗りつぶし
        ellipse.getFill().setForeColor(new Color(180,125,208));
        ellipse.setRotation(30);//図形の回転角度
        ellipse.setText("楕円形にテキストを追加する");//図形にテキストを追加する

        //星の図形を追加する
        IPrstGeomShape star = sheet.getPrstGeomShapes().addPrstGeomShape(3,8,180,200,PrstGeomShapeType.Star5);
        star.getFill().setFillType(ShapeFillType.Gradient);//グラデーション塗りつぶし
        star.getFill().setGradientColorType(GradientColorType.Preset);
        star.getFill().setForeColor(Color.orange);

        //雲の図形を追加する
        IPrstGeomShape cloud = sheet.getPrstGeomShapes().addPrstGeomShape(12,4,175,200,PrstGeomShapeType.Cloud);
        cloud.getFill().setFillType(ShapeFillType.Texture);//テクスチャ塗りつぶし
        cloud.getFill().setTexture(GradientTextureType.WhiteMarble);
        cloud.setVisible(true);//図形が表示されるかどうかを設定する
        //クラウドシャドウ効果を設定する
        cloud.getShadow().setAngle(90);
        cloud.getShadow().setDistance(10);
        cloud.getShadow().setSize(100);
        cloud.getShadow().setColor(Color.GRAY);
        cloud.getShadow().setBlur(30);
        cloud.getShadow().setTransparency(1);
        cloud.getShadow().hasCustomStyle();

        //長方形を追加する
        IPrstGeomShape rect = sheet.getPrstGeomShapes().addPrstGeomShape(15,8,125,200,PrstGeomShapeType.Rect);
        rect.getFill().customPicture("tp.png");//画像の塗りつぶしを読み込む
        rect.setName("Shape4");//図形を命名する

        //ドキュメントを保存する
        wb.saveToFile("AddShape.xlsx");
        wb.dispose();
    }
}
```
追加した結果：
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/eb664a66-cd2e-8262-54f4-85f5531f6dd8.png)


### 【例2】図形の中の文字や絵を読む

```
import com.spire.xls.*;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class Extract {
    public static void main(String[] args) throws IOException {
        //ドキュメントをロードする
        Workbook wb = new Workbook();
        wb.loadFromFile("C:\\Users\\Administrator\\IdeaProjects\\TEST\\AddShape.xlsx");

        //ワークシートを取得する
        Worksheet sheet = wb.getWorksheets().get(0);

        //指定された図形のテキストを取得する
        String text = sheet.getPrstGeomShapes().get(0).getText();
        System.out.println(text);

        //指定された形で写真を取得する
        BufferedImage image = sheet.getPrstGeomShapes().get(3).getFill().getPicture();
        ImageIO.write(image,"png",new File("ExtractedImage.png"));
    }
}
```
文字や絵を読む結果：
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/ec3f30ea-6027-4f49-038d-5f40e350ddd7.png)


### 【例3】図形を削除する

```
import com.spire.xls.*;

public class RemoveShape {
    public static void main(String[] args) {
        //ドキュメントをロードする
        Workbook wb = new Workbook();
        wb.loadFromFile("C:\\Users\\Administrator\\IdeaProjects\\TEST\\AddShape.xlsx");

        //ワークシートを取得する
        Worksheet sheet = wb.getWorksheets().get(0);

        //指定された図形を取得し、削除する
        //sheet.getPrstGeomShapes().get(1).remove();//インデックス値による取得と削除する
        // sheet.getPrstGeomShapes().get("Shape4").remove();//形状名で取得および削除する

        //すべてのグラフィックを削除する
        for (int i = sheet.getPrstGeomShapes().getCount()-1; i >= 0; i--)
        {
            sheet.getPrstGeomShapes().get(i).remove();
        }

        //ドキュメントを保存する
        wb.saveToFile("RemoveShape.xlsx");
        wb.dispose();
    }
}
```
プログラムを実行した後、図形の削除効果を確認できます。
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/3c8d0b25-7890-353d-9599-72f604a2441d.png)

今回の図形を追加、読み取り、削除する方法はここまででした、最後まで読んでいただきありがとうございます。