OOXML パッケージングの操作

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: PackageModel XLSX ファイルを読み込む際に内部で生成されます。直接インスタンス化することは標準的なハイレベルワークフローの一部ではありません。


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 の概要

クラス / インターフェイス説明
IPackageReaderOPC パッケージを読み取るためのインターフェイス(Read メソッド)
IPackageWriterOPC パッケージを書き込むためのインターフェース(Write メソッド)
PackageLoadContextWorkbook をその PackageModel にバインドします
PackageLoadContext.PackagePackageModel を返します
PackageModel.Partsパッケージ内のすべてのコンテンツパーツ
PackageModel.RelationshipsOPC リレーションシップ エントリ
PackageModel.UnsupportedPartsライブラリで処理されないパーツ
PackagePartDescriptor.PartUriパーツの OPC URI
PackagePartDescriptor.ContentTypeパートの MIME コンテンツタイプ
PackagePartDescriptor.Category論理カテゴリ(ワークシート、スタイルなど)
PackageStructureExceptionOPC の構造違反が発生したときにスローされる

参照

 日本語