نحوه کار با بستهبندی OOXML در .NET
یک فایل XLSX یک آرشیو ZIP بر پایه Open Packaging Convention (OPC) است. Aspose.Cells FOSS برای .NET ساختار بستهی زیرین را از طریق PackageModel، PackagePartDescriptor، IPackageReader و IPackageWriter در دسترس قرار میدهد. اینها APIهای سطح زیرساخت هستند که عمدتاً برای تشخیص و پیادهسازیهای ذخیرهسازی سفارشی مفیدند. با dotnet add package Aspose.Cells_FOSS نصب کنید.
راهنمای گامبهگام
مرحلهٔ ۱: نصب بسته
dotnet add package Aspose.Cells.FOSSمرحلهٔ ۲: وارد کردن فضاینام
using Aspose.Cells_FOSS;مرحلهٔ ۳: پردازش PackageStructureException
زمانی که بسته XLSX دارای ساختار OPC نامعتبر باشد (مثلاً روابط ضروری وجود ندارند)، PackageStructureException پرتاب میشود. هنگام بارگذاری فایلها از منابع نامطمئن، آن را همراه با 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 را فراهم میکند. میتوان پیادهسازیهای سفارشی را هنگام بارگذاری یا ذخیرهسازی در ذخیرهسازیهای غیرفایلی (مثلاً blobهای ابری یا بافرهای در-حافظه) ارائه داد.
// 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 بارگذاری میشود اما برخی محتواها گمشدهاند. Check LoadDiagnostics.Issues for DataLossRisk = true ورودیها. اینها نشاندهنده بخشهایی هستند که در حین تعمیر حذف شدهاند.
Custom IPackageReader فراخوانی نمیشود. اطمینان حاصل کنید که بارگذاری سازندهای که خوانندهٔ سفارشی را میپذیرد استفاده شود. نه همه Workbook بارگذاریهای سازنده یک خوانندهٔ بستهٔ سفارشی را میپذیرند.
سوالات متداول
چه زمانی باید IPackageReader یا IPackageWriter را پیادهسازی کنم؟
فقط زمانی که بکاند ذخیرهسازی شما فایلسیستم محلی نیست — برای مثال، بارگذاری مستقیم از یک جریان ذخیرهسازی ابری بدون ایجاد فایل موقت.
آیا بخشهای پشتیبانینشده در PackageModel هنگام ذخیرهسازی حفظ میشوند؟
بخشهای غیر استاندارد در UnsupportedParts تضمین نمیشود که بازنویسی شوند. برای حفظ صحت دورگرد بخشهای غیر استاندارد، پس از ذخیرهسازی فایل XLSX را در سطح ZIP پردازش پساز-عمل کنید.
تفاوت بین PackageStructureException و WorkbookLoadException چیست؟
PackageStructureException یک خطای سطح OPC/ZIP است (نوع محتوا گمشده، رابطه شکسته). WorkbookLoadException یک خطای سطح بالاتر در تجزیه محتوای XLSX XML است.