Excel のピボットテーブルを使用すると、ユーザーは大量のデータを計算し、分類し、簡潔な表形式にまとめることができるため、報告や 分析がより簡単になります。Excelの最も強力なツールの1つとして、静的なデータを多角的に表示する機能をユーザーに提供します。本記事では、無料のFree Spire.XLS for Javaを使用して、JavaでExcelのピボットテーブルを作成する方法、ピボットテーブルのデータを分類する方法、およびピボットテーブルでその他の設定を行う方法について紹介します。
【依存関係の追加】
この方法は、無料のFree Spire.XLS for Javaが必要ですので、先にjarファイルをインポートしてください。
1. Maven
Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加することで、簡単にアプリケーションに JAR ファイルをインポートすることができます。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.xls.free</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
2. 公式サイトよりJarファイルをダウンロード
まず、Free Spire.XLS for Java の公式サイトよりzipファイルをダウンロードします。zipファイルを解凍し、libフォルダの下にあるSpire.Xls.jarファイルを依存関係としてプロジェクトにインポートしてください。
Excelでピボットテーブルを作成する
以下は、Spire.XLS for Javaを使用して、既存のExcelファイルのデータを基にピボットテーブルを作成する手順です。
- Workbookクラスのオブジェクトを作成します。
- Workbook.loadFromFile() メソッドを使用して、Excelファイルを読み込みます。
- Workbook.getWorksheets().get() メソッドを使用して、指定したワークシートを取得します。
- Worksheet.getRange().get() メソッドを使用してデータソースの範囲を選択し、Workbook.PivotCaches.add() メソッドを使用して PivotCachesCollection に範囲を追加して PivotCache クラスのオブジェクトを返します。
- ワークシートにピボットテーブルを追加し、Worksheet.getPivotTables().add() メソッドを使用して場所とキャッシュを設定します。
- 「地域」と「製品」のフィールドを行の領域にドラッグします。
- 「購入数」と「購入金額」のフィールドを数値領域に追加します。
- Workbook.saveToFile() メソッドを使用して、結果ドキュメントを保存します。
Java
import com.spire.xls.*;
public class createPivotTable {
public static void main(String[] args) {
//Workbookクラスのオブジェクトを作成する
Workbook workbook = new Workbook();
//Excelファイルを読み込む
workbook.loadFromFile("C:/Sample.xlsx");
//最初のワークシートを取得する
Worksheet sheet = workbook.getWorksheets().get(0);
//データソースの範囲を選択する
CellRange dataRange = sheet.getRange().get("C1:F11");
PivotCache cache = workbook.getPivotCaches().add(dataRange);
//ワークシートにピボットテーブルを追加し、その位置とキャッシュを設定する
PivotTable pt = sheet.getPivotTables().add("ピボットテーブル", sheet.getRange().get("H3"), cache);
//「地域」と「製品」フィールドを行領域にドラッグする
PivotField regionField =(PivotField)pt.getPivotFields().get("地域");
regionField.setAxis(AxisTypes.Row);
pt.getOptions().setRowHeaderCaption("地域");
PivotField productField = (PivotField)pt.getPivotFields().get("製品");
productField.setAxis(AxisTypes.Row);
//数値エリアに「購入数」「金額」フィールドを追加する
pt.getDataFields().add(pt.getPivotFields().get("購入数"), "総購入数", SubtotalTypes.Sum);
pt.getDataFields().add(pt.getPivotFields().get("金額"), "合計金額", SubtotalTypes.Sum);
//ピボットテーブルに組み込みのスタイルを適用する
pt.setBuiltInStyle(PivotBuiltInStyles.PivotStyleMedium11);
//列の幅を設定する
sheet.setColumnWidth(8,16);
sheet.setColumnWidth(9,16);
sheet.setColumnWidth(10,16);
//ドキュメントを保存する
workbook.saveToFile("ピボットテーブルの作成.xlsx", ExcelVersion.Version2016);
}
}
【結果のExcelワークブック】
ピボットテーブルを列の値で並べ替える
PivotTable.getPivotFields().get() メソッドを使用して特定のフィールドにアクセスし、PivotField.setSortType() メソッドを使用してその分類型を設定することができます。
次のコード例では、ピボットテーブルを「地域」フィールドの列の値で並べ替える方法を示しています。
Java
import com.spire.xls.*;
import com.spire.xls.core.IPivotDataField;
public class sortPivotTableByRow {
public static void main(String[] args) {
//Workbookクラスのオブジェクトを作成する
Workbook workbook = new Workbook();
//Excelファイルを読み込む
workbook.loadFromFile("C:/Sample.xlsx");
//最初のワークシートを取得する
Worksheet sheet = workbook.getWorksheets().get(0);
//データソースの範囲を選択する
CellRange dataRange = sheet.getRange().get("A1:F11");
PivotCache cache = workbook.getPivotCaches().add(dataRange);
//ワークシートにピボットテーブルを追加し、その位置とキャッシュを設定する
PivotTable pt = sheet.getPivotTables().add("ピボットテーブル", sheet.getRange().get("H3"), cache);
//「地域」「注文番号」「製品」フィールドを行にドラッグする
PivotField regionField =(PivotField)pt.getPivotFields().get("地域");
regionField.setAxis(AxisTypes.Row);
pt.getOptions().setRowHeaderCaption("地域");
PivotField idField = (PivotField)pt.getPivotFields().get("注文番号");
idField.setAxis(AxisTypes.Row);
PivotField productField = (PivotField)pt.getPivotFields().get("製品");
productField.setAxis(AxisTypes.Row);
//数値エリアに「購入数」「金額」フィールドを追加する
pt.getDataFields().add(pt.getPivotFields().get("購入数"), "総購入数", SubtotalTypes.Sum);
pt.getDataFields().add(pt.getPivotFields().get("金額"), "合計金額", SubtotalTypes.Sum);
//ピボットテーブルに組み込みのスタイルを適用する
pt.setBuiltInStyle(PivotBuiltInStyles.PivotStyleMedium11);
//データを計算する
pt.calculateData();
//「注文番号」フィールドの列のデータを並べ替える
idField.setSortType(PivotFieldSortType.Descending);
//列の幅を設定する
sheet.setColumnWidth(8,16);
sheet.setColumnWidth(9,16);
sheet.setColumnWidth(10,16);
//ドキュメントを保存する
workbook.saveToFile("データを行で並べ替える.xlsx", ExcelVersion.Version2016);
}
}
【結果のExcelワークブック】
ピボットテーブルの行を展開または折りたたむ
特定のピボットテーブルの下にある詳細を折りたたむには、PivotField.hideItemDetail(String, Boolean) メソッドを使用して 2 番目のパラメータを true に設定し、詳細を表示するには、同じメソッドを使用して 2 番目のパラメータを false に設定してください。
Java
import com.spire.xls.*;
public class collapseRows {
public static void main(String[] args) {
//Workbookクラスのオブジェクトを作成する
Workbook workbook = new Workbook();
//Excelファイルを読み込む
workbook.loadFromFile("C:/Sample.xlsx");
//最初のワークシートを取得する
Worksheet sheet = workbook.getWorksheets().get(0);
//データソースの範囲を選択する
CellRange dataRange = sheet.getRange().get("C1:F11");
PivotCache cache = workbook.getPivotCaches().add(dataRange);
//ワークシートにピボットテーブルを追加し、その位置とキャッシュを設定する
PivotTable pt = sheet.getPivotTables().add("ピボットテーブル", sheet.getRange().get("H3"), cache);
//「地域」と「製品」フィールドを行領域にドラッグする
PivotField regionField =(PivotField)pt.getPivotFields().get("地域");
regionField.setAxis(AxisTypes.Row);
pt.getOptions().setRowHeaderCaption("地域");
PivotField productField = (PivotField)pt.getPivotFields().get("製品");
productField.setAxis(AxisTypes.Row);
//「地域」フィールドの項目詳細情報を非表示にする
regionField.hideItemDetail("西部地域",true);
regionField.hideItemDetail("東部地域",true);
//数値エリアに「購入数」「金額」フィールドを追加する
pt.getDataFields().add(pt.getPivotFields().get("購入数"), "総購入数", SubtotalTypes.Sum);
pt.getDataFields().add(pt.getPivotFields().get("金額"), "合計金額", SubtotalTypes.Sum);
//ピボットテーブルに組み込みのスタイルを適用する
pt.setBuiltInStyle(PivotBuiltInStyles.PivotStyleMedium11);
//データを計算する
pt.calculateData();
//列の幅を設定する
sheet.setColumnWidth(8,16);
sheet.setColumnWidth(9,16);
sheet.setColumnWidth(10,16);
//ドキュメントを保存する
workbook.saveToFile("行の折りたたみ.xlsx", ExcelVersion.Version2016);
}
}
【結果のExcelワークブック】
ピボットテーブルでその他の設定を行う
ピボットテーブルの表示更新・データソースの更新を行います。
PivotTable.getCache().isRefreshOnLoad(true);
小計を表示します。
PivotTable.isShowSubtotals(true);
データソースを変更します。
PivotTable.changeDataSource();
フィルターを追加します。
PivotReportFilter filter = new PivotReportFilter(String fieldName);
PivotTable.getReportFilters().add(filter);
本記事では、Spire.XLS for Javaを使用してExcelのピボットテーブルを扱う方法について説明します。ピボットテーブルやSpire.XLSについてまだ質問がある場合や、もっと詳しく知りたい場合は、Spire.XLS Forumを参照してください。