如何在 .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 对象,并将 TryRepairPackageTryRepairXml 设置为 true。将调用包装在一个 try/catch 中,以便在文件无法恢复的情况下进行 WorkbookLoadException

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 以查看库是否应用了任何修复。HasRepairstrue(如果已应用任何修复);HasDataLossRisktrue(如果可能已丢弃数据)。遍历 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.StringValueCell.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.Issues 中具有 DataLossRisk = true 的条目并通知用户。

加载后单元格值为空。
确保您访问的是正确的工作表索引或名称。使用 wb.Worksheets.Count 确认预期的工作表数量。同时检查 XLSX 文件是否未受密码保护(当前不支持受密码保护的文件)。

Workbook 构造函数在大文件上挂起。
构造函数是同步的,并将整个文件加载到内存中。对于非常大的文件,请在后台线程上运行加载,以保持 UI 响应。

DiagnosticEntry.Severity 显示 Error,但 HasRepairsfalse HasRepairs 反映的是修复是否成功应用,而不是是否检测到错误。带有 RepairApplied = falseError-severity 条目表示已检测到问题但无法修复——将其视为可能的数据完整性警告。

常见问题

我可以从流而不是文件路径加载 XLSX 文件吗?

是的。Workbook 构造函数有接受 Stream 对象的重载。如果需要容错加载,请将您的流与 LoadOptions 实例一起传递。

库是否支持加载受密码保护的 XLSX 文件?

受密码保护的文件不在当前 API 范围内。尝试加载此类文件将导致 WorkbookLoadException

我如何检查已加载工作簿中哪个工作表是活动的?

读取 Workbook.Worksheets.ActiveSheetName 以获取文件保存时最后活动的工作表名称。

我可以同时加载多个 XLSX 文件吗?

是的。每个 Workbook 实例是独立的。您可以在不同线程上实例化多个 Workbook 对象,而无需共享状态。

如果加载公式单元格时缓存结果不存在,会发生什么?

Cell.StringValue 返回空字符串。 Cell.Formula 仍然返回公式字符串。 仅在 Excel(或兼容的应用程序)打开并保存文件时,缓存值才会被填充。

另请参阅

 中文