大きな Excel ワークブックを個々のシートに分割することは、ワークシートごとにデータを処理または配布したい場合に一般的なニーズです。Java で Excel ワークブックを分割 の機能により、開発者は各シートを個別に処理またはレポート用に分離できます。Conholdate.Total for Java は、このタスクを Java アプリケーションで簡単に実行できる堅牢な SDK を提供します。このガイドでは、完全なコード例を確認し、ライブラリの設定方法を学び、パフォーマンス上の考慮点を理解し、大きな XLSX ファイルを効率的に扱うための実用的なヒントを得られます。

Java で Excel ワークブックを分割する完全な作業例

この例では、Conholdate.Total を使用して Excel ワークブックを個別のファイルに分割する方法を示します。

import com.aspose.cells.Workbook;
import com.aspose.cells.Worksheet;
import com.aspose.cells.SaveFormat;
import java.io.File;

public class ExcelSplitter {
    public static void main(String[] args) {
        String sourceFile = "input.xlsx";
        String outputDir = "splitted";

File dir = new File(outputDir);
        if (!dir.exists()) {
            dir.mkdirs();
        }

try {
            Workbook sourceWorkbook = new Workbook(sourceFile);
            int sheetCount = sourceWorkbook.getWorksheets().getCount();

for (int i = 0; i < sheetCount; i++) {
                Worksheet sheet = sourceWorkbook.getWorksheets().get(i);
                Workbook splitWorkbook = new Workbook();

splitWorkbook.getWorksheets().addCopy(sheet);
                if (splitWorkbook.getWorksheets().getCount() > 1) {
                    splitWorkbook.getWorksheets().removeAt(0);
                }

String safeName = sheet.getName().replaceAll("[\\\\/:*?\"<>|]", "_");
                String outPath = outputDir + File.separator + safeName + ".xlsx";

splitWorkbook.save(outPath, SaveFormat.XLSX);
                splitWorkbook.dispose();
            }

sourceWorkbook.dispose();
        } catch (Exception e) {
            System.err.println("Error during splitting: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

注: このコード例はコア機能を示しています。プロジェクトで使用する前に、ファイルパスや設定値を実際の環境に合わせて更新し、すべての必須依存関係が正しくインストールされていることを確認し、開発環境で徹底的にテストしてください。問題が発生した場合は、公式ドキュメントをご参照いただくか、サポートチームにお問い合わせください。

使用される主要クラス

このスニペットは、Conholdate.Total に同梱されている Aspose.Cells ライブラリの 3 つのコア クラスに依存しています:

  • Workbook - Excel ファイル全体を表し、ブックの読み込み、保存、操作用メソッドを提供します。See the Workbook class API reference.
  • Worksheet - ブック内の個々のシートにアクセスできます。
  • SaveFormat - 出力形式を定義する列挙体です。SaveFormat.XLSX は最新の XLSX コンテナ形式でファイルを書き込みます。

これらのクラスは軽量ですが、ネイティブリソースを割り当てるため、(示されているように)すぐに破棄することが 大規模な Excel ファイルのメモリ管理 にとって重要です。

JavaでExcelブックの分割を分解する

プログラムは明確なシーケンスに従っており、任意の Excel Split Java ワークフローに適応できます。

ステップバイステップの説明

  1. ソース ワークブックを読み込む - new Workbook(sourceFile) は入力 XLSX を読み取ります。
Workbook sourceWorkbook = new Workbook(sourceFile);
  1. 出力ディレクトリの作成 - ターゲットフォルダーが存在するか確認し、必要に応じて作成します。
File dir = new File(outputDir);
if (!dir.exists()) {
    dir.mkdirs();
}
  1. ワークシートを反復処理する - sourceWorkbook.getWorksheets().getCount() はシート数を返し、ループは各シートを処理します。
for (int i = 0; i < sheetCount; i++) {
    Worksheet sheet = sourceWorkbook.getWorksheets().get(i);
}
  1. 現在のシートを新しいブックにコピー - addCopy(sheet) はシートを複製し、デフォルトの空シートが存在する場合は削除されます。
Workbook splitWorkbook = new Workbook();
splitWorkbook.getWorksheets().addCopy(sheet);
if (splitWorkbook.getWorksheets().getCount() > 1) {
    splitWorkbook.getWorksheets().removeAt(0);
}
  1. 分割されたワークブックを保存 - 安全なファイル名を生成し、シートをXLSXファイルとして書き込みます。
String safeName = sheet.getName().replaceAll("[\\\\/:*?\"<>|]", "_");
String outPath = outputDir + File.separator + safeName + ".xlsx";
splitWorkbook.save(outPath, SaveFormat.XLSX);
  1. リソースの解放 - 両方の一時ワークブックとソースワークブックで dispose() を呼び出し、メモリを解放し、ネイティブリークを回避します。

全体のフローは、より大規模なデータ処理パイプラインに組み込むことができる実用的な Excelシート分割のJavaコード例 です。

前提条件とセットアップ - Conholdate.Total の開始

サンプルをコンパイルして実行する前に、開発環境が以下の前提条件を満たしていることを確認してください。

Maven 構成

Conholdate Maven リポジトリと SDK 依存関係を pom.xml に追加します:

<repositories>
    <repository>
        <id>conholdate-repo</id>
        <name>Conholdate Maven Repository</name>
        <url>https://repository.conholdate.com/repo/</url>
    </repository>
</repositories>

<dependency>
    <groupId>com.conholdate</groupId>
    <artifactId>conholdate-total</artifactId>
    <version>24.9</version>
    <type>pom</type>
</dependency>

公式ダウンロードページから最新の SDK パッケージをダウンロードしてください: Conholdate.Total for Java download. このライブラリは Java 8 以降が必要で、標準的な JVM 上で動作します。

ライセンス構成

本番環境で使用するには有効なライセンスが必要です。テスト用の一時ライセンスは一時ライセンスページから取得できます。長期プロジェクトの場合は、価格ページで価格オプションを確認してください。ライセンスファイルを取得したら、ドキュメントに記載されているように(ここでは示していません)アプリケーションの起動コードに設定してください。

効率的な Excel 分割の実用的なヒント

大きなワークブックを扱う際には、リソースの慎重な管理が必要です。以下の推奨事項は、プロセスを高速かつ信頼性の高いものに保つのに役立ちます。

メモリ管理の推奨事項

  • 各一時的なワークブックを破棄 して保存後にネイティブリソースを解放し、メモリ使用量を低く保ちます。
  • 可能な限りオブジェクトを再利用 - ソース用に単一の Workbook インスタンスを作成し、出力ディレクトリ用に同じ File オブジェクトを再利用することで、ガベージコレクタの負荷を軽減します。
  • ストリーミングモードを検討 してください。Conholdate.Total のバージョンがサポートしている場合は、ストリーミングは必要に応じて行を読み取り、ワークブック全体をメモリにロードする代わりに処理します。

一般的な落とし穴とそれを回避する方法

症状考えられる原因修正方法
java.lang.OutOfMemoryErrorすべての分割ワークブックをメモリに保持しているループ内で splitWorkbook.dispose() が呼び出されていることを確認してください(例を参照)。
Illegal file name errorシート名に `\ / : * ? " < >` のような文字が含まれている
Missing output files出力ディレクトリのパスが間違っているか、書き込み可能ではありませんoutputDir が書き込み権限のある場所を指していることを確認してください。

パフォーマンス向上策

  • ログの進行状況を記録 - 保存前にシート名を出力することで、大量バッチでの失敗箇所を特定しやすくなります。
  • JVMヒープを増やす - 非常に大きなワークブックの場合、JVMを -Xmx2g(またはそれ以上)で起動して、プロセスにより多くのメモリを割り当てます。
  • 並列処理 - ワークブックが相互依存でない場合、作業を複数のスレッドに分割できますが、基盤となるネイティブライブラリが常にスレッドセーフとは限らないことに注意してください。十分にテストしてください。

これらのヒントに従うことで、数千枚のシートや数百メガバイトのサイズのブックを扱う場合でも、JavaでExcelブックを分割できます。

結論

Conholdate.Total for Java を使用して Excel ワークブックを個々の XLSX ファイルに分割することは、ワークシート データへの細かいアクセスが必要な Java 開発者にとってシンプルでありながら強力なテクニックです。提供されたコードは、ソース ワークブックの読み込みから各シートが保存された後のリソースの解放まで、完全なワークフローを示しています。このアプローチを使用して split Excel Workbook in Java を行うことで、各シートを細粒度に制御でき、より大規模なデータ処理パイプラインに簡単に統合できます。製品を本番環境で使用する際は、適切なライセンスを取得することを忘れないでください。ライセンス料金のオプションは価格ページで確認でき、一時ライセンスページから一時ライセンスをリクエストできます。SDK がインストールされ、ベストプラクティスの推奨事項が適用されていれば、最も要求の厳しい Excel Split Java シナリオにも対応できるようになります。

よくある質問

JavaでConholdate.Totalを使用してExcelブックを分割するにはどうすればよいですか?
ExcelSplitter クラスを完全なサンプルで使用します。ソースブックをロードし、各ワークシートを反復処理し、シートごとに新しいブックを作成し、個別のXLSXファイルとして保存します。この方法は、任意のブックサイズで Javaを使用してXLSXファイルを分割 する必要がある場合にも機能します。

SDKはすべてのJavaバージョンと互換性がありますか?
SDKはJava 8以降をサポートしています。プロジェクトが互換性のあるJDKを対象としていることを確認してください。

コードを実行する前にライセンスを設定する必要がありますか?
本番環境での展開にはライセンスが必要です。テスト用の一時ライセンスは一時ライセンスページから取得でき、価格ページで完全な価格情報をご確認ください。

ワークブックに何千ものシートが含まれている場合はどうすればよいですか?
ワークブックをバッチ処理し、各一時的なワークブックを速やかに破棄し、必要に応じて JVM ヒープサイズの増加を検討してください。各シートの名前をログに記録することで、問題のあるシートをすぐに特定できます。

もっと読む