.NET で OOXML パッケージングを操作する方法
XLSX ファイルは Open Packaging Convention (OPC) ZIP アーカイブです。Aspose.Cells FOSS for .NET は、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 構造上の失敗は自動修復の範囲を超えています(例: コンテンツタイプマップが完全に欠落している場合)。unzip -t file.xlsx を使用してファイルが有効な ZIP かどうかを確認してください。有効な場合、暗号化されている可能性があります — パスワードで保護されたファイルはサポートされていません。
Workbook がロードされますが、一部のコンテンツが欠落しています。LoadDiagnostics.Issues を確認して、DataLossRisk = true エントリを確認してください。これらは修復中に削除された部分を示しています。
カスタム IPackageReader が呼び出されていません。
カスタムリーダーを受け入れるコンストラクタのオーバーロードが使用されていることを確認してください。すべての Workbook コンストラクタのオーバーロードがカスタムパッケージリーダーを受け入れるわけではありません。
よくある質問
IPackageReader または IPackageWriter を実装すべきタイミングはいつですか?
ストレージバックエンドがローカルファイルシステムでない場合にのみ—たとえば、一時ファイルを作成せずにクラウドストレージストリームから直接ロードする場合。
保存時にPackageModelのサポートされていないパーツは保持されますか?
UnsupportedParts の非標準部分は書き戻されることが保証されません。非標準部分の往復忠実度を確保するには、保存された XLSX を ZIP レベルで後処理してください。
PackageStructureException と WorkbookLoadException の違いは何ですか?
PackageStructureException は OPC/ZIP レベルの失敗です(コンテンツタイプが欠落している、リレーションシップが壊れている)。 WorkbookLoadException は XLSX XML コンテンツの解析における上位レベルの失敗です。