.NET でスプレッドシートをロードする方法

.NET でスプレッドシートをロードする方法

Aspose.Cells FOSS for .NET は、単一のコンストラクタ呼び出しで既存の XLSX スプレッドシートを開くことができ、軽微な構造的破損があるファイルに対してフォールトトレラントなロードパスを提供します。NuGet から dotnet add package Aspose.Cells_FOSS でライブラリをインストールしてください。

ステップバイステップ ガイド

ステップ 1: パッケージをインストールする

dotnet add package Aspose.Cells_FOSS

パッケージが存在することを確認してください:

dotnet list package | grep Aspose.Cells_FOSS

ステップ 2: 名前空間をインポートする

C# ファイルの先頭にこのディレクティブを追加してください:

using Aspose.Cells_FOSS;

ステップ 3: XLSX ファイルをロードする

Workbook コンストラクタにファイルパスを渡します。ライブラリは XLSX ファイルを読み取り、メモリ内のワークブックオブジェクトにデータを格納します。

using Aspose.Cells_FOSS;

var wb = new Workbook("data.xlsx");
Console.WriteLine("Loaded " + wb.Worksheets.Count + " sheet(s)");
Console.WriteLine("First sheet: " + wb.Worksheets[0].Name);
Console.WriteLine("A1 value: " + wb.Worksheets[0].Cells["A1"].StringValue);

ステップ 4: フォールトトレラント修復オプションでロード

ZIP または XML の破損がある可能性のあるファイルについては、LoadOptions オブジェクトを提供し、TryRepairPackageTryRepairXmltrue に設定します。ファイルが回復不可能な場合に備えて、try/catchWorkbookLoadException をラップしてください。

using Aspose.Cells_FOSS;

var opts = new LoadOptions
{
    TryRepairPackage = true,
    TryRepairXml = true,
};

try
{
    var wb = new Workbook("possibly-corrupt.xlsx", opts);
    Console.WriteLine("Loaded successfully");
}
catch (WorkbookLoadException ex)
{
    Console.WriteLine("Unrecoverable file: " + ex.Message);
}

ステップ5: ロード診断の確認

ロード後、Workbook.LoadDiagnostics を検査して、ライブラリが修復を適用したかどうかを確認します。HasRepairs は、修復が適用された場合は true です。HasDataLossRisk は、データが破棄された可能性がある場合は true です。Issues を反復処理して、個々のDiagnosticEntry レコードにアクセスします。

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("Repairs were applied. Data loss risk: " + diag.HasDataLossRisk);
    foreach (var entry in diag.Issues)
        Console.WriteLine($"  [{entry.Severity}] {entry.Code}: {entry.Message}");
}
else
{
    Console.WriteLine("File loaded cleanly — no repairs.");
}

ステップ 6: ワークシート データにアクセス

ロードした後、インデックスまたは名前でワークシートにアクセスし、Cell.StringValue または Cell.Value を使用してセルの値を読み取ります。

using Aspose.Cells_FOSS;

var wb = new Workbook("data.xlsx");

// By index
var sheet = wb.Worksheets[0];
Console.WriteLine("Sheet: " + sheet.Name);
Console.WriteLine("A1: " + sheet.Cells["A1"].StringValue);

// By name
var named = wb.Worksheets["Report"];
if (named != null)
    Console.WriteLine("Report!B2: " + named.Cells["B2"].StringValue);

一般的な問題と修正

WorkbookLoadException は修復オプションを有効にしていてもスローされます。
これは、ファイルの ZIP 構造が修復アルゴリズムで復元できるほど損傷が大きいことを意味します。ファイルが有効な ZIP アーカイブであることを確認してください(例: unzip -t file.xlsx を試す)。ファイルが完全に破損している場合、いかなるライブラリでも開くことはできません。

ロードされたブックブックのシート数が予想より少ないです。
修復操作により、欠落したパーツを参照していたワークシートが削除された可能性があります。LoadDiagnostics.IssuesDataLossRisk = trueが含まれるエントリを確認し、ユーザーに通知してください。

セルの値がロード後に空です。
正しいワークシートのインデックスまたは名前にアクセスしていることを確認してください。wb.Worksheets.Count を使用して期待されるシート数を確認します。また、XLSX ファイルがパスワードで保護されていないか確認してください(パスワード保護されたファイルは現在サポートされていません)。

Workbook 大きなファイルでコンストラクタがハングする。
コンストラクタは同期的で、ファイル全体をメモリにロードします。非常に大きなファイルの場合は、UI の応答性を保つためにバックグラウンドスレッドでロードを実行してください。

DiagnosticEntry.SeverityError を示しますが、HasRepairsfalse です。
HasRepairs は修復が正常に適用されたかどうかを示し、エラーが検出されたかどうかは示しません。
An Error-severity エントリに RepairApplied = false が含まれる場合、問題は検出されたが修復できなかったことを意味します — これをデータ整合性の警告の可能性として扱ってください。

よくある質問

ファイルパスの代わりに、ストリームからXLSXファイルをロードできますか?

はい。Workbook コンストラクタには Stream オブジェクトを受け取るオーバーロードがあります。フォールトトレラント ローディングが必要な場合は、LoadOptions インスタンスとともにストリームを渡してください。

ライブラリはパスワードで保護されたXLSXファイルの読み込みをサポートしていますか?

パスワードで保護されたファイルは現在の API の対象外です。これを読み込もうとすると WorkbookLoadException が返されます。

ロードされたブックでどのシートがアクティブかを確認するにはどうすればよいですか?

Workbook.Worksheets.ActiveSheetName を読み取って、ファイルが保存されたときに最後にアクティブだったシートの名前を取得します。

複数のXLSXファイルを同時にロードできますか?

はい。各Workbookインスタンスは独立しています。共有状態なしで、別々のスレッド上に複数のWorkbookオブジェクトをインスタンス化できます。

式セルがロードされ、キャッシュされた結果が存在しない場合はどうなりますか?

Cell.StringValue は空文字列を返します。Cell.Formula はまだ数式文字列を返します。キャッシュされた値は、Excel(または互換アプリケーション)がファイルを開いて保存したときにのみ設定されます。

参照

 日本語