کار با بستهبندی OOXML
کار با بستهبندی OOXML
یک فایل XLSX یک آرشیو ZIP بر پایه Open Packaging Convention (OPC) است. Aspose.Cells FOSS برای .NET لایه بستهٔ زیرین را از طریق IPackageReader، IPackageWriter و گراف شیء PackageModel در دسترس قرار میدهد. اینها APIهای سطح پایین هستند که برای تشخیص و ابزارسازی طراحی شدهاند — بیشتر برنامهها فقط از کلاس سطح بالای Workbook استفاده میکنند.
مدل بسته
PackageModel محتوای منطقی یک آرشیو XLSX را نشان میدهد. این سه مجموعه را در دسترس میگذارد: Parts (همهٔ بخشهای محتوا)، Relationships (ورودیهای رابطهٔ OPC)، و UnsupportedParts (بخشهایی که در فایل وجود دارند اما کتابخانه آنها را پردازش نمیکند). هر بخش توسط یک PackagePartDescriptor که شامل PartUri، ContentType و Category است توصیف میشود.
using Aspose.Cells_FOSS;
// PackageModel is accessed via PackageLoadContext during custom load flows
// The following illustrates the object structure
// var context = new PackageLoadContext(workbook, packageModel);
// var model = context.Package;
// foreach (var part in model.Parts)
// {
// Console.WriteLine($"URI={part.PartUri}, Type={part.ContentType}");
// }
// Console.WriteLine("Unsupported parts: " + model.UnsupportedParts.Count);Note:
PackageModelبهصورت داخلی هنگام بارگذاری یک فایل XLSX پر میشود. ایجاد مستقیم بخشی از جریان کار سطحبالای استاندارد نیست.
IPackageReader و IPackageWriter
IPackageReader یک متد Read() تک برای خواندن یک بستهٔ OPC تعریف میکند. IPackageWriter یک متد Write() تک برای نوشتن یک بسته تعریف میکند. این رابطها توسط خواننده/نویسنده داخلی کتابخانه مبتنی بر ZIP پیادهسازی میشوند و میتوانند توسط پیادهسازیهای سفارشی برای سناریوهای حافظهدرونخطی یا ذخیرهسازی ابری فراهم شوند.
// Signature reference — not a complete runnable example
// public interface IPackageReader { void Read(...); }
// public interface IPackageWriter { void Write(...); }PackageStructureException
PackageStructureException زمانی پرتاب میشود که ساختار بسته XLSX بهطور اساسی نامعتبر باشد — برای مثال، وقتی روابط OPC مورد نیاز گم شده باشند. این استثنا سلسلهمراتبی کلی استثناها را گسترش میدهد و پیامی حاوی توصیف این که کدام قاعده ساختاری نقض شده است، حمل میکند.
using Aspose.Cells_FOSS;
var opts = new LoadOptions { TryRepairPackage = true };
try
{
var wb = new Workbook("bad.xlsx", opts);
}
catch (PackageStructureException ex)
{
Console.WriteLine("OPC structure error: " + ex.Message);
}
catch (WorkbookLoadException ex)
{
Console.WriteLine("Load error: " + ex.Message);
}نکات و بهترین روشها
- از
PackageModel.UnsupportedPartsبرای کشف بخشهای غیر استاندارد که ممکن است در طی پردازش دورانی بهصورت ساکن حذف شوند، استفاده کنید. - در هنگام بارگذاری فایلها از منابع غیرقابل اعتماد، علاوه بر
WorkbookLoadException،PackageStructureExceptionرا نیز بگیرید. - رابطهای
IPackageReader/IPackageWriterنقاط توسعه هستند؛ تنها زمانی که به ذخیرهسازی سفارشی نیاز دارید (مثلاً بارگذاری از یک Blob ابری بدون فایل محلی) آنها را پیادهسازی کنید. - برای اکثر تشخیصها،
LoadDiagnostics(قابل دسترسی از طریقWorkbook.LoadDiagnostics) کافی است — رفتن به لایه بسته به ندرت لازم است.
مشکلات رایج
| مشکل | دلیل | راهحل |
|---|---|---|
PackageStructureException در زمان بارگذاری | رابطه OPC مورد نیاز موجود نیست | مقدار TryRepairPackage = true را در LoadOptions تنظیم کنید؛ پس از بارگذاری LoadDiagnostics.Issues را بررسی کنید |
UnsupportedParts خالی نیست | فایل شامل پسوندهای غیر استاندارد است | این بخشها در زمان ذخیره بهصورت دقیق حفظ میشوند اگر در زمان بارگذاری موجود بودهاند |
IPackageReader سفارشی فراخوانی نشده است | به overload سازندهٔ اشتباه ارسال شد | اطمینان حاصل کنید که LoadOptions یا overload سازندهای که خوانندهٔ سفارشی را میپذیرد، استفاده شود |
FAQ
آیا برای کارهای معمولی با صفحهگسترده نیاز به استفاده از IPackageReader/IPackageWriter دارم؟
خیر. این واسطها نقاط گسترشی برای سناریوهای پیشرفته هستند. تمام عملیات خواندن/نوشتن استاندارد مستقیماً از طریق Workbook انجام میشوند.
آیا بخشهای پشتیبانینشده هنگام ذخیره حفظ میشوند؟
بخشهای فهرستشده در PackageModel.UnsupportedParts پردازش نمیشوند و ممکن است بازنویسی نشوند. اگر نیاز به حفظ کامل در مسیر دورگرد برای بخشهای غیراستاندارد دارید، از یک مرحله پردازش پس از سطح zip استفاده کنید.
تفاوت بین PackageStructureException و WorkbookLoadException چیست؟
PackageStructureException نشاندهنده یک خطای سطح OPC/ZIP است (نوع محتوا گم شده، رابطه خراب). WorkbookLoadException نشاندهنده یک خطای تجزیه یا معنایی در سطح بالاتر در محتوای XLSX است.
API Reference خلاصه
| کلاس / اینترفیس | توضیح |
|---|---|
IPackageReader | رابط برای خواندن بسته OPC (روش Read) |
IPackageWriter | رابط برای نوشتن بسته OPC (روش Write) |
PackageLoadContext | یک Workbook را به PackageModel آن پیوند میدهد |
PackageLoadContext.Package | مقدار PackageModel را باز میگرداند |
PackageModel.Parts | تمام بخشهای محتوا در بسته |
PackageModel.Relationships | ورودیهای رابطه OPC |
PackageModel.UnsupportedParts | بخشهایی که توسط کتابخانه پردازش نشدهاند |
PackagePartDescriptor.PartUri | URI OPC برای بخش |
PackagePartDescriptor.ContentType | نوع محتوای MIME بخش |
PackagePartDescriptor.Category | دستهبندی منطقی (ورقکار، سبکها، و غیره) |
PackageStructureException | در موارد نقض ساختار OPC پرتاب میشود |