Hur man arbetar med OOXML-paketering i .NET

Hur man arbetar med OOXML-paketering i .NET

En XLSX-fil är ett Open Packaging Convention (OPC) ZIP arkiv. Aspose.Cells FOSS för .NET visar den underliggande paketstrukturen via PackageModel, PackagePartDescriptor, IPackageReader och IPackageWriter. Dessa är API:er på infrastrukturnivå som främst är användbara för diagnostik och anpassade lagringsimplementationer. Installera med dotnet add package Aspose.Cells_FOSS.

Steg-för-steg-guide

Steg 1: Installera paketet

dotnet add package Aspose.Cells.FOSS

Steg 2: Importera namnrymden

using Aspose.Cells_FOSS;

Steg 3: Hantera PackageStructureException

PackageStructureException kastas när XLSX-paketet har en ogiltig OPC-struktur (t.ex. saknade obligatoriska relationer). Fånga den tillsammans med WorkbookLoadException när du laddar filer från opålitliga källor.

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);
}

Steg 4: Förstå IPackageReader och IPackageWriter

IPackageReader definierar en Read() metod för att läsa ett OPC-paket; IPackageWriter definierar en Write() metod för att skriva ett sådant. Biblioteket tillhandahåller standardimplementeringar baserade på ZIP. Anpassade implementationer kan tillhandahållas när man läser från eller sparar till lagring som inte är filsystem (t.ex. moln-blobbar eller minnesbuffertar).

// 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)");

Steg 5: Kontrollera otillåtna delar

När ett XLSX-fil laddas, listar PackageModel.UnsupportedParts delar som biblioteket inte bearbetar. Dessa bevaras men tolkas inte. Åtkomst till PackageLoadContext under ett anpassat laddningsflöde för att inspektera modellen.

// 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.");

Vanliga problem och lösningar

PackageStructureException kastas även med TryRepairPackage = true. Vissa OPC-strukturella fel är bortom automatisk reparation (t.ex. helt saknad content-type-karta). Verifiera att filen är en giltig ZIP med unzip -t file.xlsx. Om den är giltig kan den vara krypterad — lösenordsskyddade filer stöds inte.

Workbook laddas men en del av innehållet saknas. Check LoadDiagnostics.Issues for DataLossRisk = true poster. Dessa indikerar delar som tappades bort under reparation.

Custom IPackageReader anropas inte. Säkerställ att den konstruktoröverladdning som accepterar den anpassade läsaren används. Inte alla Workbook konstruktoröverladdningar accepterar en anpassad paketläsare.

Vanliga frågor

När bör jag implementera IPackageReader eller IPackageWriter?

Endast när din lagringsbackend inte är det lokala filsystemet — till exempel att läsa direkt från en molnlagringsström utan att skapa en temporär fil.

Bevaras osupporterade delar i PackageModel vid sparning?

Icke-standarddelar i UnsupportedParts garanteras inte att skrivas tillbaka. För att behålla rundresa-fideliteten för icke-standarddelar, efterbearbeta den sparade XLSX på ZIP-nivå.

Vad är skillnaden mellan PackageStructureException och WorkbookLoadException?

PackageStructureException är ett OPC/ZIP nivåfel (saknad innehållstyp, bruten relation). WorkbookLoadException är ett fel på högre nivå vid parsing av XLSX XML-innehållet.

Se även

 Svenska