OOXML パッケージングを .NET で扱う方法
XLSX ファイルは Open Packaging Convention (OPC) ZIP アーカイブです。Aspose.Cells .NET 用の FOSS は、PackageModel、PackagePartDescriptor、IPackageReader、および IPackageWriter を通じて基礎となるパッケージ構造を公開します。これらは主に診断やカスタムストレージ実装に役立つインフラストラクチャレベルの API です。dotnet add package Aspose.Cells_FOSS でインストールしてください。
ステップバイステップ ガイド
ステップ 1: パッケージをインストールする
dotnet add package Aspose.Cells.FOSSステップ 2: 名前空間をインポートする
using Aspose.Cells_FOSS;ステップ 3: PackageStructureException を処理する
PackageStructureException は、XLSX パッケージの OPC 構造が無効な場合(例:必須リレーションシップが欠如している)にスローされます。信頼できないソースからファイルを読み込む際は、WorkbookLoadException と一緒に捕捉してください。
using Aspose.Cells_FOSS;
var opts = new LoadOptions { TryRepairPackage = true };
try
{
var wb = new Workbook("suspect.xlsx", opts);
Console.WriteLine("Loaded: " + wb.Worksheets.Count + " sheet(s)");
}
catch (PackageStructureException ex)
{
Console.WriteLine("OPC structure invalid: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Load error: " + ex.Message);
}ステップ 4: IPackageReader と IPackageWriter を理解する
IPackageReader は OPC パッケージを読み取るための Read() メソッドを定義し、IPackageWriter は書き込むための Write() メソッドを定義します。ライブラリはデフォルトの ZIP バックエンド実装を提供します。カスタム実装は、ファイルシステム以外のストレージ(例:クラウドブロブやメモリバッファ)からのロードや保存時に提供できます。
// Signature reference
// public interface IPackageReader { void Read(/* ... */); }
// public interface IPackageWriter { void Write(/* ... */); }
//
// Standard usage: pass a Stream to the Workbook constructor
using Aspose.Cells_FOSS;
using System.IO;
byte[] fileBytes = File.ReadAllBytes("data.xlsx");
using var ms = new MemoryStream(fileBytes);
var wb = new Workbook(ms);
Console.WriteLine("Loaded from stream: " + wb.Worksheets.Count + " sheet(s)");ステップ 5: 未サポートのパーツをチェックする
XLSX ファイルをロードする際、PackageModel.UnsupportedParts はライブラリが処理しないパーツを一覧表示します。これらは保持されますが解釈されません。カスタムロードフロー中に PackageLoadContext にアクセスしてモデルを検査してください。
// PackageModel is populated internally during Workbook construction.
// Use LoadDiagnostics to detect load-time structural warnings without
// dropping to the PackageModel level directly.
using Aspose.Cells_FOSS;
var opts = new LoadOptions { TryRepairPackage = true, TryRepairXml = true };
var wb = new Workbook("file.xlsx", opts);
var diag = wb.LoadDiagnostics;
if (diag.HasRepairs)
Console.WriteLine("Package had " + diag.Issues.Count() + " repair entries.");一般的な問題と対策
PackageStructureException でも例外がスローされます TryRepairPackage = true. 一部の OPC 構造上の失敗は自動修復の範囲を超えています (例: コンテンツタイプマップが完全に欠落している場合)。ファイルが有効な ZIP であることを確認してください with unzip -t file.xlsx. 有効な場合、暗号化されている可能性があります — パスワード保護されたファイルはサポートされていません。
Workbook ロードされますが、一部のコンテンツが欠落しています。 Check LoadDiagnostics.Issues for DataLossRisk = true エントリです。これらは修復中に除外された部分を示しています。
Custom IPackageReader 呼び出されていません。 カスタムリーダーを受け入れるコンストラクタのオーバーロードが使用されていることを確認してください。Not all Workbook コンストラクタのオーバーロードはカスタムパッケージリーダーを受け入れます。
よくある質問
IPackageReader または IPackageWriter を実装すべきタイミングはいつですか?
ストレージバックエンドがローカルファイルシステムでない場合にのみです — 例として、テンポラリファイルを作成せずにクラウドストレージのストリームから直接読み込む場合です。
PackageModel の未サポート部分は保存時に保持されますか?
UnsupportedParts の非標準部分は書き戻しが保証されません。非標準部分の往復忠実度を保つには、保存された XLSX を ZIP レベルで事後処理してください。
PackageStructureException と WorkbookLoadException の違いは何ですか?
PackageStructureException は OPC/ZIP レベルの失敗です(コンテンツタイプが欠如、関係が壊れています)。 WorkbookLoadException は XLSX XML コンテンツの解析における上位レベルの失敗です。