Kuinka työskennellä OOXML-pakettien kanssa .NETissä
XLSX‑tiedosto on Open Packaging Convention (OPC) ZIP‑arkisto. Aspose.Cells FOSS for .NET paljastaa taustalla olevan pakettirakenteen PackageModel, PackagePartDescriptor, IPackageReader ja IPackageWriter kautta. Nämä ovat infrastruktuuritason API‑rajapintoja, jotka ovat pääasiassa hyödyllisiä diagnostiikassa ja mukautetuissa tallennusratkaisuissa. Asenna dotnet add package Aspose.Cells_FOSS avulla.
Vaiheittainen opas
Vaihe 1: Asenna paketti
dotnet add package Aspose.Cells_FOSSVaihe 2: Tuo nimiavaruus
using Aspose.Cells_FOSS;Vaihe 3: Käsittele PackageStructureException
PackageStructureException heitetään, kun XLSX‑paketissa on virheellinen OPC‑rakenne (esim. puuttuvat vaaditut suhteet). Käsittele se yhdessä WorkbookLoadException kanssa, kun lataat tiedostoja epäluotettavista lähteistä.
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);
}Vaihe 4: Ymmärrä IPackageReader ja IPackageWriter
IPackageReader määrittelee Read()-menetelmän OPC-paketin lukemiseen; IPackageWriter määrittelee Write()-menetelmän sen kirjoittamiseen. Kirjasto tarjoaa oletus‑ZIP‑pohjaiset toteutukset. Mukautetut toteutukset voidaan toimittaa, kun ladataan tai tallennetaan ei‑tiedostojärjestelmävarastoon (esim. pilvipaloihin tai muistipuskureihin).
// 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)");Vaihe 5: Tarkista tukemattomat osat
Kun ladataan XLSX‑tiedostoa, PackageModel.UnsupportedParts luettelee osat, joita kirjasto ei käsittele. Nämä säilytetään, mutta niitä ei tulkita. Käytä PackageLoadContext mukautetun latausvirran aikana tarkastellaksesi mallia.
// 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.");Yleisiä ongelmia ja korjauksia
PackageStructureException heitetään jopa TryRepairPackage = true kanssa.
Jotkut OPC-rakenteelliset virheet ovat automaattisen korjauksen ulkopuolella (esim. täysin puuttuva content‑type‑kartta). Varmista, että tiedosto on kelvollinen ZIP unzip -t file.xlsx:lla. Jos kelvollinen, se saattaa olla salattu — salasanasuojattuja tiedostoja ei tueta.
Workbook latautuu, mutta osa sisällöstä puuttuu.
Tarkista LoadDiagnostics.Issues DataLossRisk = true-merkinnöistä. Nämä osoittavat osia, jotka pudotettiin korjauksen aikana.
Custom IPackageReader ei kutsuta.
Varmista, että käytetään konstruktorin ylikuormitusta, joka hyväksyy mukautetun lukijan. Kaikki Workbook-konstruktorin ylikuormitukset eivät hyväksy mukautettua pakettilukijaa.
Usein kysytyt kysymykset
Milloin minun tulisi toteuttaa IPackageReader tai IPackageWriter?
Vain silloin, kun tallennusbackendisi ei ole paikallinen tiedostojärjestelmä — esimerkiksi lataamalla suoraan pilvitallennusvirrasta luomatta väliaikaista tiedostoa.
Säilyvätkö tukemattomat osat PackageModelissa tallennuksen yhteydessä?
UnsupportedParts:n ei‑standardi osat eivät ole taattuja kirjoitettavaksi takaisin. Ei‑standardi osien pyöräytyksen tarkkuuden varmistamiseksi, jälkikäsittele tallennettu XLSX ZIP‑tasolla.
Mikä on ero PackageStructureExceptionin ja WorkbookLoadExceptionin välillä?
PackageStructureException on OPC/ZIP-tason virhe (puuttuva sisältötyyppi, rikkinäinen suhde). WorkbookLoadException on korkeamman tason virhe XLSX XML -sisällön jäsentämisessä.