Πώς να εργαστείτε με το πακέτο OOXML στο .NET

Πώς να εργαστείτε με το πακέτο OOXML στο .NET

Ένα αρχείο XLSX είναι ένα αρχείο ZIP σύμφωνα με το Open Packaging Convention (OPC). Το Aspose.Cells FOSS for .NET εκθέτει τη βασική δομή του πακέτου μέσω PackageModel, PackagePartDescriptor, IPackageReader και IPackageWriter. Αυτά είναι APIs επιπέδου υποδομής που είναι κυρίως χρήσιμα για διαγνωστικούς σκοπούς και προσαρμοσμένες υλοποιήσεις αποθήκευσης. Εγκαταστήστε το με dotnet add package Aspose.Cells_FOSS.

Οδηγός βήμα-βήμα

Βήμα 1: Εγκατάσταση του πακέτου

dotnet add package Aspose.Cells_FOSS

Βήμα 2: Εισαγωγή του χώρου ονομάτων

using Aspose.Cells_FOSS;

Βήμα 3: Διαχείριση PackageStructureException

PackageStructureException εκτοξεύεται όταν το πακέτο XLSX έχει μη έγκυρη δομή OPC (π.χ. λείπουν οι απαιτούμενες σχέσεις). Πιάστε το μαζί με WorkbookLoadException όταν φορτώνετε αρχεία από μη αξιόπιστες πηγές.

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

Βήμα 4: Κατανόηση του IPackageReader και του IPackageWriter

IPackageReader ορίζει μια Read() μέθοδο για την ανάγνωση ενός πακέτου OPC· IPackageWriter ορίζει μια Write() μέθοδο για τη γραφή του. Η βιβλιοθήκη παρέχει προεπιλεγμένες υλοποιήσεις με υποστήριξη ZIP. Μπορούν να παρασχεθούν προσαρμοσμένες υλοποιήσεις κατά τη φόρτωση ή αποθήκευση σε αποθήκευση εκτός συστήματος αρχείων (π.χ. cloud blobs ή buffers στη μνήμη).

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

Βήμα 5: Έλεγχος για μη υποστηριζόμενα μέρη

Κατά τη φόρτωση ενός αρχείου XLSX, PackageModel.UnsupportedParts καταγράφει τμήματα που η βιβλιοθήκη δεν επεξεργάζεται. Αυτά διατηρούνται αλλά δεν ερμηνεύονται. Πρόσβαση PackageLoadContext κατά τη διάρκεια μιας προσαρμοσμένης ροής φόρτωσης για να ελέγξετε το μοντέλο.

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

Κοινά προβλήματα και διορθώσεις

PackageStructureException εκτοξεύεται ακόμη και με TryRepairPackage = true.
Ορισμένες δομικές αποτυχίες OPC είναι πέρα από την αυτόματη επισκευή (π.χ. εντελώς ελλιπής χάρτης content-type). Επαληθεύστε ότι το αρχείο είναι έγκυρο ZIP με unzip -t file.xlsx. Εάν είναι έγκυρο, μπορεί να είναι κρυπτογραφημένο — τα αρχεία με προστασία κωδικού πρόσβασης δεν υποστηρίζονται.

Workbook φορτώνει αλλά λείπουν ορισμένα περιεχόμενα.
Ελέγξτε LoadDiagnostics.Issues για καταχωρήσεις DataLossRisk = true. Αυτά υποδεικνύουν τμήματα που αφαιρέθηκαν κατά την επισκευή.

Custom IPackageReader δεν καλείται.
Βεβαιωθείτε ότι χρησιμοποιείται η υπερφόρτωση του κατασκευαστή που δέχεται τον προσαρμοσμένο αναγνώστη. Δεν όλες οι υπερφορτώσεις του κατασκευαστή Workbook δέχονται έναν προσαρμοσμένο αναγνώστη πακέτου.

Συχνές Ερωτήσεις

Πότε πρέπει να υλοποιήσω το IPackageReader ή το IPackageWriter;

Μόνο όταν η αποθηκευτική υποδομή σας δεν είναι το τοπικό σύστημα αρχείων — για παράδειγμα, φορτώνοντας απευθείας από ροή αποθήκευσης στο σύννεφο χωρίς να δημιουργήσετε προσωρινό αρχείο.

Διατηρούνται τα μη υποστηριζόμενα μέρη στο PackageModel κατά την αποθήκευση;

Τα μη τυποποιημένα τμήματα στο UnsupportedParts δεν εγγυώνται ότι θα γραφούν ξανά. Για πιστότητα κυκλικής επεξεργασίας των μη τυποποιημένων τμημάτων, επεξεργαστείτε μεταγενέστερα το αποθηκευμένο XLSX σε επίπεδο ZIP.

Ποια είναι η διαφορά μεταξύ του PackageStructureException και του WorkbookLoadException;

PackageStructureException είναι αποτυχία επιπέδου OPC/ZIP (έλλειψη τύπου περιεχομένου, σπασμένη σχέση). WorkbookLoadException είναι αποτυχία υψηλότερου επιπέδου στην ανάλυση του περιεχομένου XML του XLSX.

Δείτε επίσης

 Ελληνικά