XML Processing と作業する
XML 処理の取り扱い
XLSX ファイルは OPC パッケージ内の XML パーツにデータを格納します。Aspose.Cells .NET 用の FOSS は、XML のパースおよびシリアライズ層を 4 つのマッパークラス: WorkbookXmlMapper, WorksheetXmlMapper, SharedStringTableXmlMapper, StylesheetXmlMapper を通じて公開します。各マッパーは対応する XML パーツに対して Read と Write の両方の操作を実装します。これらは内部インフラストラクチャ API であり、ほとんどのアプリケーションコードは Workbook と Worksheet オブジェクトのみを通して動作します。
XML マッパークラス
各 XML マッパーは XLSX 構造の XML パーツを 1 つ担当します:
| Mapper | XML パート | Responsibility |
|---|---|---|
WorkbookXmlMapper | xl/workbook.xml | ブックレベルのメタデータ、シート参照、定義名 |
WorksheetXmlMapper | xl/worksheets/sheetN.xml | セルデータ、数式、ハイパーリンク、条件付き書式、データ検証 |
SharedStringTableXmlMapper | xl/sharedStrings.xml | 重複除去された文字列値のための共有文字列テーブル |
StylesheetXmlMapper | xl/styles.xml | セルスタイル、フォント、塗りつぶし、罫線、数値書式 |
各マッパーは 2 つのメソッド — Read と Write — を公開し、ライブラリのロードパイプラインとセーブパイプラインでそれぞれ呼び出されます。
XmlParsingException
XmlParsingException は、マッパーが修復不可能な不正な XML に遭遇したときにスローされます。特に XML のパース中に失敗が発生した場合、エラー階層で WorkbookLoadException の前に発生します。
using Aspose.Cells_FOSS;
var opts = new LoadOptions
{
TryRepairPackage = true,
TryRepairXml = true,
};
try
{
var wb = new Workbook("malformed.xlsx", opts);
Console.WriteLine("Loaded: " + wb.Worksheets.Count + " sheet(s)");
}
catch (XmlParsingException ex)
{
Console.WriteLine("XML parse error: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Load error: " + ex.Message);
}ヒントとベストプラクティス
LoadOptionsにTryRepairXml = trueを設定して、マッパーのフォールトトレラント解析パスを有効にします。- 外部システムからのファイルを処理する際、破損した XML を生成する可能性がある場合、
WorkbookLoadExceptionに加えてXmlParsingExceptionを捕捉してください。 - XML マッパークラスはアプリケーションコードからインスタンス化することを想定していません —
Workbookの構築およびSave()の間に自動的に呼び出されます。 - 診断のために生の XML コンテンツを検査する必要がある場合、XLSX を ZIP として抽出し、該当する XML パーツを直接確認してください。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
読み込み時のXmlParsingException | XLSX の一部で、XML が不正です | LoadOptions に TryRepairXml = true を設定する |
| 往復処理後にスタイルが欠落しています | StylesheetXmlMapper はカスタムスタイルレコードを解析できませんでした | LoadDiagnostics.Issues にスタイル関連の修復エントリがないか確認してください |
| 読み込んだファイルに共有文字列がありません | SharedStringTableXmlMapper は破損した共有文字列テーブルに遭遇しました | TryRepairXml を有効にしてください; 元のファイルに有効なxl/sharedStrings.xmlがあることを確認してください |
FAQ
自分独自の XML マッパーを実装できますか?
XML マッパークラスはシールドされた内部インフラストラクチャです。カスタムマッパーは現在の API の表層ではサポートされていません。
なぜ別個の SharedStringTableXmlMapper があるのですか?
OOXML 仕様では、文字列値を共有文字列テーブル (xl/sharedStrings.xml) に分割し、ワークブック全体で繰り返される文字列の重複排除を行います。マッパーはこのテーブルの読み取りと書き込みを個別に処理します。
TryRepairXml = true はすべての XML の問題を解決しますか?
TryRepairXml は、閉じられていない要素、欠落した名前空間、切り捨てられた値など、回復可能な問題を処理します。構造的には有効だが意味的に一貫性のない XML(例:壊れた数式参照)は、依然として XmlParsingException を引き起こす可能性があります。
API Reference の概要
| クラス | 説明 |
|---|---|
WorkbookXmlMapper | 読み取り/書き込み xl/workbook.xml |
WorksheetXmlMapper | シートごとに XML パーツを読み取り/書き込み |
SharedStringTableXmlMapper | 読み取り/書き込み xl/sharedStrings.xml |
StylesheetXmlMapper | 読み取り/書き込み xl/styles.xml |
XmlParsingException | 回復不能な XML のパース失敗時にスローされます |