Kuinka työskennellä OOXML-pakettien kanssa .NETissä

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_FOSS

Vaihe 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ä.

Katso myös

 Suomi