スプレッドシート管理の操作
スプレッドシート管理の操作
このガイドでは、Java 用の Aspose.Cells FOSS を使用して Excel ワークブックの作成、読み込み、変更、保存方法を示します。エンドツーエンドのスプレッドシート管理のために、Workbook、WorksheetCollection、Worksheet、Cells、および Cell クラスの使い方を学びます。
新しいワークブックの作成
引数なしコンストラクタを使用して空のワークブックを作成します。Sheet1 という名前の空白シートが自動的に 1 枚追加されます。
import com.aspose.cells.foss.Workbook;
import com.aspose.cells.foss.WorksheetCollection;
import com.aspose.cells.foss.Worksheet;
Workbook workbook = new Workbook();
WorksheetCollection sheets = workbook.getWorksheets();
Worksheet sheet = sheets.get(0);
System.out.println("Sheet name: " + sheet.getName()); // Sheet1ファイルからワークブックを読み込む
Workbook(fileName) コンストラクタにファイルパスを渡すと、既存の .xlsx または .ods ファイルを開くことができます。形式検出やパスワード処理を制御する必要がある場合は、Workbook(fileName, options) を使用して LoadOptions を指定します。
import com.aspose.cells.foss.Workbook;
import com.aspose.cells.foss.LoadOptions;
// Simple load
Workbook workbook = new Workbook("data/report.xlsx");
// Load with explicit options
LoadOptions opts = new LoadOptions();
Workbook workbookWithOpts = new Workbook("data/report.xlsx", opts);ストリームからワークブックを読み込む
Workbook(stream) と Workbook(stream, options) は任意の java.io.InputStream を受け入れます。ファイルがネットワークリソース、データベース BLOB、またはメモリ内バイト配列から取得される場合に便利です。
import com.aspose.cells.foss.Workbook;
import java.io.FileInputStream;
import java.io.InputStream;
try (InputStream is = new FileInputStream("data/template.xlsx")) {
Workbook workbook = new Workbook(is);
System.out.println("Worksheets: " + workbook.getWorksheets().getCount());
}ワークシートへのアクセスと管理
Workbook.getWorksheets() は WorksheetCollection を返します。インデックスまたは名前でシートを取得し、すべてのシートを反復処理し、必要に応じてシートを追加または削除できます。
import com.aspose.cells.foss.Workbook;
import com.aspose.cells.foss.WorksheetCollection;
import com.aspose.cells.foss.Worksheet;
Workbook workbook = new Workbook();
WorksheetCollection sheets = workbook.getWorksheets();
// Access by index
Worksheet first = sheets.get(0);
System.out.println(first.getName()); // Sheet1
// Add a named sheet
int idx = sheets.add("Summary");
Worksheet summary = sheets.get(idx);
summary.setName("Summary");
// Iterate all sheets
for (Worksheet ws : sheets) {
System.out.println("Sheet: " + ws.getName());
}
// Remove a sheet by name
sheets.removeAt("Sheet1");
System.out.println("Remaining sheets: " + sheets.getCount());セル値の読み取りと書き込み
Worksheet.getCells() を使用してセルに移動します。これにより Cells コレクションが返されます。名前(例: "A1")またはゼロベースの行/列インデックスで Cell を取得します。putValue() を使ってプリミティブ値を書き込み、getValue() / getStringValue() でそれらを読み戻します。
import com.aspose.cells.foss.Workbook;
import com.aspose.cells.foss.Worksheet;
import com.aspose.cells.foss.Cells;
import com.aspose.cells.foss.Cell;
Workbook workbook = new Workbook();
WorksheetCollection sheets = workbook.getWorksheets();
Worksheet sheet = sheets.get(0);
Cells cells = sheet.getCells();
// Write values
cells.get("A1").putValue("Product");
cells.get("B1").putValue("Units Sold");
// Write by row/column index (0-based)
Cell a2 = cells.get(1, 0);
a2.putValue("Widget A");
Cell b2 = cells.get(1, 1);
b2.putValue(1200);
// Read back
System.out.println(a2.getStringValue()); // Widget A
System.out.println(b2.getValue()); // 1200セル数式の設定
setFormula() を介してセルに数式文字列を割り当てます。Aspose.Cells はブックが保存されるとき、または計算が明示的にトリガーされたときに数式を評価します。
import com.aspose.cells.foss.Workbook;
import com.aspose.cells.foss.Cells;
import com.aspose.cells.foss.Cell;
Workbook workbook = new Workbook();
WorksheetCollection sheets = workbook.getWorksheets();
Cells cells = sheets.get(0).getCells();
cells.get("A1").putValue(100);
cells.get("A2").putValue(200);
Cell a3 = cells.get("A3");
a3.setFormula("=SUM(A1:A2)");
System.out.println("Formula: " + a3.getFormula()); // =SUM(A1:A2)ブックの保存
ワークブックを書き込むには Workbook.save(fileName) を使用します。出力形式はファイル拡張子で決まります。Excel ワークブックには .xlsx を使用してください。
import com.aspose.cells.foss.Workbook;
Workbook workbook = new Workbook();
workbook.getWorksheets().get(0).getCells().get("A1").putValue("Hello");
// Save to file -- format inferred from .xlsx extension
workbook.save("output/result.xlsx");リソースの解放
Workbook は AutoCloseable を実装しています。try-with-resources ブロックを使用して、使用後にワークブックの内部リソースが速やかに解放されるようにします。
import com.aspose.cells.foss.Workbook;
try (Workbook workbook = new Workbook("data/large.xlsx")) {
workbook.save("output/large_modified.xlsx");
}
// workbook.close() called automaticallyヒントとベストプラクティス
- 大きなファイルでは常に try-with-resources(
try (Workbook wb = new Workbook(...)))を使用し、ファイルハンドルが開いたままになるのを防ぎます。 - ホットループでは
cells.get(cellName)よりcells.get(row, column)を優先してください。整数オーバーロードによりセル名の解析が繰り返されるのを防げます。 - シートをインデックスでアクセスする前に
workbook.getWorksheets().getCount()を呼び出し、IndexOutOfBoundsExceptionを回避してください。 - シートは
add()の後にsetName()を使用して明示的に名前付けし、下流のコードが脆弱なインデックスではなく名前で検索できるようにします。 - 式の結果を
setFormula()の直後にすぐに使用しないでください。最初に保存するか、同じセッションで計算結果が必要な場合は再読み込みしてください。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
WorkbookLoadException が new Workbook(fileName) 上 | ファイルパスが正しくないか、ファイルがロックされています | パスが存在し、読み取り可能であることを確認してください。ファイルを保持している他のアプリケーションを閉じてください |
get(index) が IndexOutOfBoundsException をスローします | シートインデックスが getCount() - 1 を超えています | アクセスする前にsheets.getCount()を確認してください;add()を使用して新しいシートを作成します |
数式セルは空のgetValue()を返します | メモリ内で数式が自動計算されません | ワークブックを保存し、再度読み込んで数式結果を取得してください |
save()の後に出力ファイルが破損しています | ファイル拡張子が間違っています | ファイル名が.xlsxで終わっていることを確認してください;形式は拡張子から推測されます |
FAQ
ワークシートの名前を変更するにはどうすればよいですか?
インデックスで WorksheetCollection から Worksheet オブジェクトを取得し、setName(name) を新しい表示名で呼び出します:
workbook.getWorksheets().get(0).setName("Sales Data");ブックにシートがいくつあるかを確認するにはどうすればよいですか?
Workbook.getWorksheets() が返す WorksheetCollection に対して getCount() を呼び出し、ワークシートの総数を取得します:
int count = workbook.getWorksheets().getCount();1 回の呼び出しで複数のシートを追加できますか?
No. シートごとに worksheets.add(sheetName) を1回呼び出します。各呼び出しは新しく作成されたシートのインデックスを返します。
セルの値の型をどうやって確認しますか?
名前で Cell を取得し、getType() を呼び出します。これにより CellValueType 列挙型の値が返されます:
Cell cell = cells.get("A1");
System.out.println(cell.getType()); // CellValueType enum valueAPI Reference 概要
| クラス / メソッド | 説明 |
|---|---|
Workbook() | 空のワークブックを作成し、1枚の空白シートを含めます |
Workbook(fileName) | ファイルパスからワークブックを読み込みます |
Workbook(stream) | InputStream からワークブックを読み込みます |
Workbook(fileName, options) | LoadOptions でワークブックを読み込みます |
Workbook.getWorksheets() | WorksheetCollection を返します |
Workbook.save(fileName) | ファイルに保存します(拡張子から形式を推測) |
Workbook.save(stream, format) | 明示的な SaveFormat を使用してストリームに保存します |
WorksheetCollection.get(index) | ゼロベースインデックスでシートを返します |
WorksheetCollection.get(name) | 名前でシートを返す |
WorksheetCollection.add(sheetName) | 名前付きシートを追加し、そのインデックスを返す |
WorksheetCollection.getCount() | ブック内のシート数 |
WorksheetCollection.removeAt(sheetName) | 名前でシートを削除する |
Worksheet.getCells() | このシートの Cells コレクションを返します |
Worksheet.getName() / setName() | シート タブ名を取得または設定します |
Cells.get(cellName) | 名前(例: “A1”)で Cell を返します |
Cells.get(row, column) | ゼロベースの行/列で Cell を返します |
Cell.putValue(value) | セルに値を書き込む |
Cell.getValue() | セルの値を Object として読み取ります |
Cell.getStringValue() | セルの値を String として読み取ります |
Cell.setFormula(formula) | 数式文字列を設定します (例: “=SUM(A1:A2)”) |
LoadOptions | ワークブック読み込みの設定 |
SaveFormat | フォーマット定数の列挙(フォーマットはファイル拡張子から推測され、save()には渡されません) |