Cómo cargar una hoja de cálculo en .NET
Aspose.Cells FOSS for .NET le permite abrir hojas de cálculo XLSX existentes con una única llamada al constructor y proporciona una ruta de carga tolerante a fallos para archivos que presentan una corrupción estructural menor. Instale la biblioteca desde NuGet con dotnet add package Aspose.Cells_FOSS.
Guía paso a paso
Paso 1: Instalar el paquete
dotnet add package Aspose.Cells_FOSSVerifique que el paquete esté presente:
dotnet list package | grep Aspose.Cells_FOSSPaso 2: Importar el espacio de nombres
Agrega esta directiva al principio de tu archivo C#.
using Aspose.Cells_FOSS;Paso 3: Cargar un archivo XLSX
Pase la ruta del archivo al constructor Workbook. La biblioteca lee el archivo XLSX y rellena el objeto de libro de trabajo en memoria.
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);Paso 4: Cargar con opciones de reparación tolerantes a fallos
Para los archivos que puedan tener corrupción ZIP o XML, proporcione un objeto LoadOptions con TryRepairPackage y TryRepairXml configurados en true. Envuelva la llamada en un try/catch para WorkbookLoadException en caso de que el archivo sea irrecuperable.
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);
}Paso 5: Verificar diagnósticos de carga
Después de cargar, inspeccione Workbook.LoadDiagnostics para ver si la biblioteca aplicó alguna reparación. HasRepairs es true si se aplicó alguna reparación; HasDataLossRisk es true si los datos pueden haber sido descartados. Itere Issues para acceder a los registros individuales de 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.");
}Paso 6: Acceder a los datos de la hoja de cálculo
Después de cargar, acceda a las hojas de cálculo por índice o nombre, y lea los valores de las celdas usando Cell.StringValue o 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);Problemas comunes y soluciones
WorkbookLoadException se lanza incluso con las opciones de reparación habilitadas.
Esto significa que la estructura ZIP del archivo está demasiado dañada para que los algoritmos de reparación la recuperen. Verifique que el archivo sea un archivo ZIP válido (p. ej., pruebe unzip -t file.xlsx). Si el archivo está completamente corrupto, no puede ser abierto por ninguna biblioteca.
El libro de trabajo cargado tiene menos hojas de lo esperado.
Una operación de reparación puede haber eliminado hojas de cálculo que hacían referencia a partes faltantes. Verifique LoadDiagnostics.Issues para entradas con DataLossRisk = true y notifique al usuario.
Los valores de celda están vacíos después de cargar.
Asegúrese de que está accediendo al índice o nombre de hoja de cálculo correcto. Use wb.Worksheets.Count para confirmar el número esperado de hojas. También verifique que el archivo XLSX no esté protegido con contraseña (los archivos protegidos con contraseña no son compatibles actualmente).
Workbook el constructor se cuelga con un archivo grande.
El constructor es sincrónico y carga todo el archivo en memoria. Para archivos muy grandes, ejecute la carga en un hilo en segundo plano para mantener la UI receptiva.
DiagnosticEntry.Severity muestra Error pero HasRepairs es false.
HasRepairs refleja si una reparación se aplicó con éxito, no si se detectaron errores. Una entrada de gravedad Error-severity con RepairApplied = false significa que el problema se detectó pero no pudo repararse — trate esto como una posible advertencia de integridad de datos.
Preguntas Frecuentes
¿Puedo cargar un archivo XLSX desde un Stream en lugar de una ruta de archivo?
Sí. El constructor Workbook tiene sobrecargas que aceptan un objeto Stream. Pase su flujo junto con una instancia LoadOptions si se necesita una carga tolerante a fallos.
¿La biblioteca admite cargar archivos XLSX protegidos con contraseña?
Los archivos protegidos con contraseña no están en la superficie actual de la API. Intentar cargar uno resultará en un WorkbookLoadException.
¿Cómo verifico cuál hoja está activa en el libro de trabajo cargado?
Lea Workbook.Worksheets.ActiveSheetName para obtener el nombre de la hoja que estaba activa por última vez cuando se guardó el archivo.
¿Puedo cargar varios archivos XLSX simultáneamente?
Sí. Cada instancia Workbook es independiente. Puede instanciar varios objetos Workbook en hilos separados sin estado compartido.
¿Qué ocurre si se carga una celda de fórmula y el resultado en caché está ausente?
Cell.StringValue devuelve una cadena vacía. Cell.Formula todavía devuelve la cadena de fórmula. El valor en caché se rellena solo cuando Excel (o una aplicación compatible) abre y guarda el archivo.