كيفية العمل مع OOXML التعبئة والتغليف في .NET
ملف XLSX هو أرشيف ZIP Open Packaging Convention (OPC). Aspose.Cells FOSS for .NET يعرض بنية الحزمة الأساسية من خلال PackageModel, PackagePartDescriptor, IPackageReader,و ، و IPackageWriter.هذه هي API على مستوى البنية التحتية مفيدة بشكل رئيسي للتشخيص والتنفيذ المخصص لتخزين. dotnet add package Aspose.Cells_FOSS.
خطوة بخطوة دليل
الخطوة 1: قم بتثبيت الحزمة
dotnet add package Aspose.Cells_FOSSالخطوة 2: استيراد اسم الفضاء
using Aspose.Cells_FOSS;الخطوة 3: التعامل مع الخزانةStructureاستثناء
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 و IPacketWriter
IPackageReader تعريف أ Read() طريقة قراءة حزمة OPC ؛; IPackageWriter تعريف أ Write() طريقة الكتابة واحدة.المكتبة توفر التطبيقات المحددة مدعومة من ZIP.يمكن توفير التطبيقات المخصصة عند تحميل أو حفظ إلى تخزين غير نظام الملفات (مثل الكتل السحابية أو البوفيرات في الذاكرة).
// 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 يتجاوز إصلاحًا تلقائيًّا (على سبيل المثال ، خريطة نوع المحتوى المفقودة تمامًَّا). unzip -t file.xlsx.إذا كانت صالحة، فإنه يمكن تشفيرها – لا يتم دعم الملفات المحمية كلمة المرور.
Workbook يغيب عن بعض المحتوى ولكن هناك بعض المواد التي تفتقر إلى المحتوي. التحقق LoadDiagnostics.Issues من أجل DataLossRisk = true هذه تشير إلى الأجزاء التي تم إسقاطها أثناء الإصلاح.
Custom IPackageReader لا يتم استدعاءها. تأكد من أن البناء المفرط الذي يقبل القارئ المخصص يستخدم. Workbook يوافق المصنع على قارئ حزمة مخصص.
الأسئلة المتكررة
متى يجب أن أطبق IPackageReader أو IPacketWriter؟?
فقط عندما لا يكون النسخة الاحتياطية للتخزين هو نظام الملفات المحلي - على سبيل المثال، تحميل مباشرة من تدفق التخزن السحابي دون إنشاء ملف مؤقت.
هل يتم حفظ الأجزاء غير المدعومة في PackageModel على النزول؟?
أجزاء غير قياسية في UnsupportedParts لا يضمن إعادة كتابة.للمصداقية الدائرة من الأجزاء غير القياسية، ما بعد العملية تم حفظ XLSX على مستوى ZIP.
ما الفرق بين PackageStructureException و WorkbookLoadExcept؟?
PackageStructureException هو فشل مستوى OPC / ZIP (فقدان نوع المحتوى، وارتباط كسر). WorkbookLoadException هو فشل أعلى مستوى في تصفية محتوى XLSX XML.