كيفية العمل مع حزم OOXML في .NET

كيفية العمل مع حزم OOXML في .NET

ملف XLSX هو أرشيف ZIP وفقًا لاتفاقية الحزم المفتوحة (OPC). Aspose.Cells FOSS for .NET يكشف عن بنية الحزمة الأساسية من خلال PackageModel، PackagePartDescriptor، IPackageReader، وIPackageWriter. هذه واجهات برمجة تطبيقات على مستوى البنية التحتية مفيدة أساسًا للتشخيص وتنفيذات التخزين المخصصة. قم بالتثبيت باستخدام 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. يمكن توفير تنفيذات مخصصة عند التحميل من أو الحفظ إلى تخزين غير نظام الملفات (مثل كتل السحابة أو المخازن المؤقتة في الذاكرة).

// 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 يتجاوز الإصلاح التلقائي (مثل عدم وجود خريطة نوع المحتوى تمامًا). تحقق من أن الملف ZIP صالح باستخدام unzip -t file.xlsx. إذا كان صالحًا، قد يكون مشفرًا — الملفات المحمية بكلمة مرور غير مدعومة.

Workbook يتم التحميل لكن بعض المحتوى مفقود. تحقق من LoadDiagnostics.Issues للحصول على إدخالات DataLossRisk = true. هذه تشير إلى الأجزاء التي تم حذفها أثناء الإصلاح.

المخصص IPackageReader غير مُستدعى. تأكد من استخدام تحميل المُنشئ الذي يقبل القارئ المخصص. ليس كل تحميلات المُنشئ Workbook تقبل قارئ حزمة مخصص.

الأسئلة المتكررة

متى يجب أن أقوم بتنفيذ IPackageReader أو IPackageWriter؟

فقط عندما لا يكون نظام التخزين الخلفي هو نظام الملفات المحلي — على سبيل المثال، تحميل مباشرةً من تدفق تخزين سحابي دون إنشاء ملف مؤقت.

هل يتم حفظ الأجزاء غير المدعومة في PackageModel عند الحفظ؟

الأجزاء غير القياسية في UnsupportedParts غير مضمونة أن تُعاد كتابتها. لضمان دقة الجولة الكاملة للأجزاء غير القياسية، قم بمعالجة ملف XLSX المحفوظ على مستوى ZIP بعد الحفظ.

ما الفرق بين PackageStructureException و WorkbookLoadException؟

PackageStructureException هو فشل على مستوى OPC/ZIP (نوع محتوى مفقود، علاقة مكسورة). WorkbookLoadException هو فشل على مستوى أعلى في تحليل محتوى XML لملف XLSX.

انظر أيضًا

 العربية