1. 概要

場合によっては、JavaアプリケーションでExcelファイルを操作する必要があります。

このチュートリアルでは、 Apache POI ライブラリを使用して、Excelファイルの2つの行の間に新しい行を挿入する方法について具体的に説明します。

2. Mavenの依存関係

まず、 poi-ooxmlMaven依存関係をpom.xmlファイルに追加する必要があります。

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.0</version>
</dependency>

3. 2つの行の間に行を挿入する

3.1. ApachePOI関連クラス

Apache POIはライブラリのコレクションであり、各ライブラリは特定のタイプのファイルの操作専用です。 XSSF ライブラリには、 xlsxExcel形式を処理するためのクラスが含まれています。 次の図は、 xlsxExcelファイルを操作するためのApachePOI関連のインターフェイスとクラスを示しています。

3.2. 行挿入の実装

既存のExcelシートの中央にm行を挿入するには、挿入ポイントから最後の行までのすべての行をm行下に移動する必要があります。

まず、Excelファイルを読み取る必要があります。 このステップでは、XSSFWorkbookクラスを使用します。

Workbook workbook = new XSSFWorkbook(fileLocation);

2番目のステップは、 getSheet()メソッドを使用してブックのシートにアクセスすることです。

Sheet sheet = workbook.getSheetAt(0);

3番目のステップは、新しい行の挿入を開始する現在の位置にある行から、シートの最後の行まで行をシフトすることです。

int lastRow = sheet.getLastRowNum(); 
sheet.shiftRows(startRow, lastRow, rowNumber, true, true);

このステップでは、 getLastRowNum()メソッドを使用して最後の行番号を取得し、 shiftRows()メソッドを使用して行をシフトします。 このメソッドは、startRowlastRowの間でrowNumberのサイズだけ行をシフトします。

最後に、 createRow()メソッドを使用して新しい行を挿入します。

sheet.createRow(startRow);

上記の実装では、移動される行のフォーマットが維持されることに注意してください。 また、移動する範囲に非表示の行がある場合、それらは新しい行の挿入中に移動します。

3.3. 単体テスト

リソースディレクトリ内のブックを読み取り、位置2に行を挿入して、コンテンツを新しいExcelファイルに書き込むテストケースを作成してみましょう。 最後に、結果ファイルの行番号をメインファイルでアサートします。

テストケースを定義しましょう:

public void givenWorkbook_whenInsertRowBetween_thenRowCreated() {
    int startRow = 2;
    int rowNumber = 1;
    Workbook workbook = new XSSFWorkbook(fileLocation);
    Sheet sheet = workbook.getSheetAt(0);

    int lastRow = sheet.getLastRowNum();
    if (lastRow < startRow) {
        sheet.createRow(startRow);
    }

    sheet.shiftRows(startRow, lastRow, rowNumber, true, true);
    sheet.createRow(startRow);

    FileOutputStream outputStream = new FileOutputStream(NEW_FILE_NAME);
    workbook.write(outputStream);

    File file = new File(NEW_FILE_NAME);

    final int expectedRowResult = 5;
    Assertions.assertEquals(expectedRowResult, workbook.getSheetAt(0).getLastRowNum());

    outputStream.close();
    file.delete();
    workbook.close();
}

4. 結論

要約すると、Apache POIライブラリを使用して、Excelファイルの2つの行の間に行を挿入する方法を学習しました。 いつものように、記事の完全なソースコードは、GitHubから入手できます。