.NET में OOXML पैकेजिंग के साथ कैसे काम करें

.NET में OOXML पैकेजिंग के साथ कैसे काम करें

एक XLSX फ़ाइल एक Open Packaging Convention (OPC) ZIP आर्काइव है। Aspose.Cells .NET के लिए FOSS मूल पैकेज संरचना को PackageModel, PackagePartDescriptor, IPackageReader, और IPackageWriter के माध्यम से उजागर करता है। ये इन्फ्रास्ट्रक्चर-लेवल API मुख्यतः निदान और कस्टम स्टोरेज कार्यान्वयन के लिए उपयोगी हैं। dotnet add package Aspose.Cells_FOSS के साथ स्थापित करें।

स्टेप-बाय-स्टेप गाइड

कदम 1: पैकेज स्थापित करें

dotnet add package Aspose.Cells.FOSS

कदम 2: Namespace आयात करें

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 OPC पैकेज को पढ़ने के लिए एक Read() मेथड परिभाषित करता है; 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 संरचनात्मक विफलताएँ स्वचालित मरम्मत से परे हैं (जैसे पूरी तरह से गायब 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 कंटेंट को पार्स करने में उच्च-स्तर की विफलता है।

यह भी देखें

 हिन्दी