OOXML パッケージングの操作
OOXML パッケージングの操作
XLSX ファイルは Open Packaging Convention (OPC) ZIP アーカイブです。Aspose.Cells FOSS for .NET は、IPackageReader、IPackageWriter、および PackageModel オブジェクト グラフを通じて基礎となるパッケージ層を公開します。これらは診断やツール向けの低レベル API であり、ほとんどのアプリケーションは高レベルの Workbook クラスのみを使用します。
パッケージ モデル
PackageModel は XLSX アーカイブの論理的内容を表します。これにより 3 つのコレクションが公開されます: Parts(すべてのコンテンツ パーツ)、Relationships(OPC リレーションシップ エントリ)、および UnsupportedParts(ライブラリが処理しないファイル内のパーツ)。各パーツは PackagePartDescriptor で記述され、PartUri、ContentType、Category を含みます。
using Aspose.Cells_FOSS;
// PackageModel is accessed via PackageLoadContext during custom load flows
// The following illustrates the object structure
// var context = new PackageLoadContext(workbook, packageModel);
// var model = context.Package;
// foreach (var part in model.Parts)
// {
// Console.WriteLine($"URI={part.PartUri}, Type={part.ContentType}");
// }
// Console.WriteLine("Unsupported parts: " + model.UnsupportedParts.Count);Note:
PackageModelXLSX ファイルを読み込む際に内部で生成されます。直接インスタンス化することは標準的なハイレベルワークフローの一部ではありません。
IPackageReader と IPackageWriter
IPackageReader は OPC パッケージを読み取るための単一の Read() メソッドを定義します。IPackageWriter はそれを書き込むための単一の Write() メソッドを定義します。これらのインターフェイスは、ライブラリ内部の ZIP ベースのリーダー/ライターによって実装され、インメモリやクラウドストレージのシナリオ向けにカスタム実装で提供することができます。
// Signature reference — not a complete runnable example
// public interface IPackageReader { void Read(...); }
// public interface IPackageWriter { void Write(...); }PackageStructureException
PackageStructureException は、XLSX パッケージ構造が根本的に無効な場合にスローされます — 例えば、必須の OPC リレーションシップが欠如している場合です。これは一般的な例外階層を拡張し、どの構造的不変条件が違反されたかを示すメッセージを保持します。
using Aspose.Cells_FOSS;
var opts = new LoadOptions { TryRepairPackage = true };
try
{
var wb = new Workbook("bad.xlsx", opts);
}
catch (PackageStructureException ex)
{
Console.WriteLine("OPC structure error: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Load error: " + ex.Message);
}ヒントとベストプラクティス
- ラウンドトリップ時に黙って削除される可能性のある非標準パーツを検出するには、
PackageModel.UnsupportedPartsを使用します。 - 信頼できないソースからファイルをロードする際は、
WorkbookLoadExceptionに加えてPackageStructureExceptionをキャッチしてください。 IPackageReader/IPackageWriterインターフェースは拡張ポイントです。ローカルファイルなしでクラウドブロブからロードするなど、カスタムストレージが必要な場合にのみ実装してください。- ほとんどの診断では、
LoadDiagnostics(Workbook.LoadDiagnosticsからアクセス可能)で十分です — パッケージ層に降りる必要はほとんどありません。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
ロード時の PackageStructureException | 必要な OPC リレーションシップが欠落しています | LoadOptions に TryRepairPackage = true を設定してください;ロード後に LoadDiagnostics.Issues を確認してください |
UnsupportedParts が空でない | ファイルに非標準の拡張子が含まれています | これらの部分は、ロード時に存在していた場合、保存時に文字通りそのまま保持されます |
カスタム IPackageReader が呼び出されません | 誤ったコンストラクタのオーバーロードに渡されました | カスタムリーダーを受け入れる LoadOptions またはコンストラクタのオーバーロードが使用されていることを確認してください |
FAQ
通常のスプレッドシート作業で IPackageReader/IPackageWriter を使用する必要がありますか?
いいえ。これらのインターフェースは高度なシナリオ向けの拡張ポイントです。すべての標準的な読み書き操作は Workbook を直接通ります。
サポートされていないパーツは保存時に保持されますか?
PackageModel.UnsupportedParts に記載されているパーツは処理されず、書き戻されない可能性があります。非標準パーツの往復忠実度が必要な場合は、zip レベルのポストプロセッシング手順を使用してください。
PackageStructureException と WorkbookLoadException の違いは何ですか?
PackageStructureException は OPC/ZIP レベルの失敗(コンテンツタイプの欠如、破損したリレーションシップ)を示します。WorkbookLoadException は XLSX コンテンツ内の上位レベルのパースまたはセマンティックな失敗を示します。
API Reference の概要
| クラス / インターフェイス | 説明 |
|---|---|
IPackageReader | OPC パッケージを読み取るためのインターフェイス(Read メソッド) |
IPackageWriter | OPC パッケージを書き込むためのインターフェース(Write メソッド) |
PackageLoadContext | Workbook をその PackageModel にバインドします |
PackageLoadContext.Package | PackageModel を返します |
PackageModel.Parts | パッケージ内のすべてのコンテンツパーツ |
PackageModel.Relationships | OPC リレーションシップ エントリ |
PackageModel.UnsupportedParts | ライブラリで処理されないパーツ |
PackagePartDescriptor.PartUri | パーツの OPC URI |
PackagePartDescriptor.ContentType | パートの MIME コンテンツタイプ |
PackagePartDescriptor.Category | 論理カテゴリ(ワークシート、スタイルなど) |
PackageStructureException | OPC の構造違反が発生したときにスローされる |