JavaでExcelシートにデータを書き込む

データ処理と管理の分野において、Excel はその強力な機能と幅広い応用から、データの保存と表示の重要なツールとなっています。Java 開発の過程では、テキスト、数値、配列、DataTable データなど、さまざまなタイプのデータを Excel ファイルに書き込み、さまざまなビジネスニーズに対応する必要がしばしばあります。
この記事では、無料の Java ライブラリを使用して、プログラムから**Excel のセルにデータを書き込む方法**を紹介します。

## 無料の Java ライブラリをインストールする
コーディングを始める前に、プロジェクトに [Free Spire.XLS for Java](https://www.e-iceblue.com/Introduce/free-xls-for-java.html) という無料のライブラリをインストールする必要があります。このライブラリはさまざまな Excel 処理機能をサポートしており、Excel ファイルの作成、読み取り、修正、変換を簡単に行うことができます。
Maven プロジェクトを使用している場合は、pom.xml に以下の依存関係を追加することができます。
```xml
<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.xls.free</artifactId>
    <version>5.3.0</version>
</dependency>
```

> また、以下のリンクから製品パッケージをダウンロードし、手動でJARパッケージをインポートすることもできます。

https://www.e-iceblue.com/Download/xls-for-java-free.html


## Java サンプル：Excel セルにテキストまたは数値を書き込む
指定したセルにデータを書き込む方法は 2 通りあります。
* テキストを書き込む：**Worksheet.get().setText()** または **Worksheet.get().setValue()** メソッドを使用します。
* 数値を書き込む：**Worksheet.get().setNumberValue()** メソッドを使用します。
```java
import com.spire.xls.*;

public class WriteTextNumber {

    public static void main(String[] args) {

        // Excelワークブックを作成する  
        Workbook workbook = new Workbook();

        // その中の最初のワークシートを取得する
        Worksheet worksheet = workbook.getWorksheets().get(0);

        // 指定されたセルにデータを書き込む
        worksheet.get("A1").setText("商品ID");
        worksheet.get("B1").setText("商品名");
        worksheet.get("C1").setValue("在庫状況");
        worksheet.get("D1").setValue("数量");

        worksheet.get("A2").setValue("SP-001");
        worksheet.get("B2").setText("商品A");
        worksheet.get("C2").setText("在庫補充");
        worksheet.get("D2").setNumberValue(80);

        worksheet.get("A3").setValue("SP-002");
        worksheet.get("B3").setText("商品B");
        worksheet.get("C3").setText("使用中");
        worksheet.get("D3").setNumberValue(102);

        // フォントスタイルを設定する  
        worksheet.get("A1:D1").getStyle().getFont().isBold(true);
        worksheet.get("A1:D3").getStyle().getFont().setSize(11);

        // Excelファイルを保存する
        workbook.saveToFile("WriteData.xlsx", ExcelVersion.Version2016);
    }
}
```
![WriteExcelTextNumber.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/57be302a-0243-4d55-ac74-b56893bd3645.png)


## Java サンプル：配列をExcelシートに書き込む  
一次元または二次元配列については、**Worksheet.insertArray(Object[][] objectArray, int firstRow, int firstColumn)** メソッドを使用して、配列内のデータをワークシートの指定位置に挿入することができます。
```java
import com.spire.xls.*;

public class WriteArrayToWorksheet {

    public static void main(String[] args) {

        // Excelワークブックを作成する  
        Workbook workbook = new Workbook();

        // その中の最初のワークシートを取得する
        Worksheet worksheet = workbook.getWorksheets().get(0);

        // 二次元配列の作成
        String[][] twoDimensionalArray = new String[][]{
                {"SKU", "説明", "購入日", "購入価格"},
                {"SP7875", "品目 1", "2024/1/31", "2000"},
                {"TR87680", "品目 2", "2024/3/10", "1500"},
                {"MK676554", "品目 3", "2024/3/25", "560"}
        };

        // ワークシートに配列を書き込む
        worksheet.insertArray(twoDimensionalArray, 1, 1);

        // フォントスタイルの設定
        worksheet.get("A1:D1").getStyle().getFont().isBold(true);
        worksheet.get("A1:D4").getStyle().getFont().setSize(11);

        // Excelファイルを保存する
        workbook.saveToFile("InsertArrays.xlsx", ExcelVersion.Version2016);
    }
}
```
![WriteExcelArray.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/421c1215-f53f-4222-a69e-75ad1e533509.png)


## Java サンプル：DataTable を Excel シートに書き込む
DataTable クラスを定義してデータテーブルを表現し、データ行を追加することができます。その後、**Worksheet.insertDataTable(DataTable dataTable, boolean columnHeaders, int firstRow, int firstColumn, boolean transTypes)** メソッドを使用して、DataTable のデータをワークシートの指定位置に挿入します。
```java
import com.spire.data.table.DataRow;
import com.spire.data.table.DataTable;
import com.spire.xls.*;

import java.text.DecimalFormat;

public class WriteDataTableToWorksheet {

    public static void main(String[] args) throws Exception {

        // Excelワークブックを作成する  
        Workbook workbook = new Workbook();

        // その中の最初のワークシートを取得する
        Worksheet worksheet = workbook.getWorksheets().get(0);

        // DataTableオブジェクトの作成
        DataTable dataTable = new DataTable();
        dataTable.getColumns().add("シリアル番号", Integer.class);
        dataTable.getColumns().add("商品", String.class);
        dataTable.getColumns().add("単価", DecimalFormat.class);

        // 行を作成し、データを追加する
        DataRow dr = dataTable.newRow();
        dr.setInt(0, 556788);
        dr.setString(1, "データケーブル");
        dr.setString(2, "8.5");
        dataTable.getRows().add(dr);

        dr = dataTable.newRow();
        dr.setInt(0, 768087);
        dr.setString(1, "ワイヤレスマウス");
        dr.setString(2, "59.9");
        dataTable.getRows().add(dr);

        dr = dataTable.newRow();
        dr.setInt(0, 336813);
        dr.setString(1, "ネットワークケーブル");
        dr.setString(2, "15.5");
        dataTable.getRows().add(dr);

        // データ・テーブルをワークシートに書き込む
        worksheet.insertDataTable(dataTable, true, 1, 1, true);

        // フォントスタイルの設定
        worksheet.get("A1:D1").getStyle().getFont().isBold(true);
        worksheet.get("A1:D4").getStyle().getFont().setSize(11);

        // 保存Excel文件
        workbook.saveToFile("WriteDataTable.xlsx", ExcelVersion.Version2016);
    }
}
```
![WriteExcelDatatable.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/3aaf9307-98a2-4774-82fa-de93bfce1638.png)


## まとめ
上記の例を使って、Java プログラミング言語を通じてさまざまなデータを Excel テーブルに書き込むことができます。
Free Spire.XLS for Java は無料のライブラリで、Excel 内のデータのさらなる分析や、チャートなどの要素を挿入することもサポートしています。ご興味があれば、以下のオンラインドキュメントを確認してください。

https://www.e-iceblue.com/Tutorials/Java/Spire.XLS-for-Java/Program-Guide/Spire.XLS-Program-Guide-Content-for-Java.html