Cara Bekerja dengan Pembungkusan OOXML dalam .NET
Fail XLSX adalah arkib ZIP mengikut Open Packaging Convention (OPC). Aspose.Cells FOSS untuk .NET mendedahkan struktur pakej asas melalui PackageModel, PackagePartDescriptor, IPackageReader, dan IPackageWriter. Ini adalah API peringkat infrastruktur yang terutama berguna untuk diagnostik dan pelaksanaan storan tersuai. Pasang dengan dotnet add package Aspose.Cells_FOSS.
Panduan Langkah demi Langkah
Langkah 1: Pasang Pakej
dotnet add package Aspose.Cells_FOSSLangkah 2: Import Ruang Nama
using Aspose.Cells_FOSS;Langkah 3: Tangani PackageStructureException
PackageStructureException dilemparkan apabila pakej XLSX mempunyai struktur OPC yang tidak sah (contohnya hubungan yang diperlukan tiada). Tangkap ia bersama WorkbookLoadException semasa memuatkan fail dari sumber yang tidak dipercayai.
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);
}Langkah 4: Fahami IPackageReader dan IPackageWriter
IPackageReader mendefinisikan kaedah Read() untuk membaca pakej OPC; IPackageWriter mendefinisikan kaedah Write() untuk menulis satu. Perpustakaan menyediakan pelaksanaan lalai berasaskan ZIP. Pelaksanaan tersuai boleh disediakan semasa memuatkan atau menyimpan ke storan bukan sistem fail (contohnya blob awan atau penampan dalam memori).
// 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)");Langkah 5: Semak Bahagian yang Tidak Disokong
Apabila memuatkan fail XLSX, PackageModel.UnsupportedParts menyenaraikan bahagian yang tidak diproses oleh perpustakaan. Bahagian‑bahagian ini dipelihara tetapi tidak ditafsirkan. Akses PackageLoadContext semasa aliran muat naik tersuai untuk memeriksa model.
// 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.");Masalah Biasa dan Penyelesaian
PackageStructureException dilemparkan walaupun dengan TryRepairPackage = true.
Beberapa kegagalan struktur OPC berada di luar pembaikan automatik (contohnya peta content-type yang hilang sepenuhnya). Sahkan fail itu adalah ZIP yang sah dengan unzip -t file.xlsx. Jika sah, ia mungkin disulitkan — fail yang dilindungi kata laluan tidak disokong.
Workbook dimuat tetapi beberapa kandungan hilang.
Semak LoadDiagnostics.Issues untuk entri DataLossRisk = true. Ini menunjukkan bahagian yang terbuang semasa pembaikan.
Custom IPackageReader tidak dipanggil.
Pastikan overload konstruktor yang menerima pembaca khusus digunakan. Tidak semua overload konstruktor Workbook menerima pembaca pakej khusus.
Soalan Lazim
Bila saya harus melaksanakan IPackageReader atau IPackageWriter?
Hanya apabila backend penyimpanan anda bukan sistem fail tempatan — contohnya, memuatkan secara langsung dari aliran penyimpanan awan tanpa membuat fail sementara.
Adakah bahagian yang tidak disokong dalam PackageModel dipelihara semasa disimpan?
Bahagian bukan piawai dalam UnsupportedParts tidak dijamin akan ditulis kembali. Untuk kesetiaan pusingan balik bahagian bukan piawai, proses selepas simpanan XLSX pada peringkat ZIP.
Apakah perbezaan antara PackageStructureException dan WorkbookLoadException?
PackageStructureException ialah kegagalan peringkat OPC/ZIP (tipe kandungan hilang, hubungan rosak). WorkbookLoadException ialah kegagalan peringkat lebih tinggi dalam mengurai kandungan XML XLSX.