การทํางานกับ OOXML Packaging
การทํางานกับ OOXML Packaging
ไฟล์ XLSX เป็นอาร์คิเวอร์ ZIP ของ Open Packaging Convention (OPC) Aspose.Cells FOSS สําหรับ .NET เปิดเผยชั้นแพ็คเกจที่อยู่เบื้องหลังผ่านการใช้งานของระบบ APK และ OPC ในรูปแบบนี้ IPackageReader, IPackageWriter, และการ PackageModel object graph. เหล่านี้เป็น APIs ระดับต่ํา สําหรับการวินิจฉัยและเครื่องมือ แอพลิเคชั่นส่วนใหญ่ใช้เพียงระดับสูงเท่านั้น 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. การนํามาใช้โดยตรงไม่ใช่ส่วนหนึ่งของกระบวนการทํางานระดับสูงแบบสแตนเดอร์ด์.
IPpackageReader และ 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 package เป็นที่ไม่ถูกต้องอย่างแท้จริง เช่น เมื่อความสัมพันธ์ 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เพื่อค้นหาชิ้นส่วนที่ไม่เป็นมาตรฐาน ที่อาจถูกทิ้งไปอย่างเงียบๆ ในการเดินทางกลับ. - Catch
PackageStructureExceptionนอกจากนี้WorkbookLoadExceptionเมื่อโหลดไฟล์จากแหล่งที่ไม่น่าเชื่อถือ. - การ
IPackageReader/IPackageWriterระหว่างทางเป็นจุดขยาย; ใช้มันเพียงเมื่อคุณต้องการการเก็บรักษาที่พิเศษ (เช่น การโหลดจากบล็อบเมฆโดยไม่มีไฟล์ท้องถิ่น). - สําหรับการวินิจฉัยส่วนใหญ่,
LoadDiagnostics(สามารถเข้าถึงได้ผ่านทางWorkbook.LoadDiagnostics) เพียงพอ การลดลงสู่ชั้นบรรจุเป็นเรื่องยากที่จะจําเป็น.
ปัญหาทั่วไป
| Issue | Cause | แก้ไข |
|---|---|---|
PackageStructureException ในภาระ | ความสัมพันธ์ OPC ที่ต้องมีหายไป | เซ็ต TryRepairPackage = true ใน LoadOptions; ตรวจสอบ LoadDiagnostics.Issues หลังจากการบรรทุก |
UnsupportedParts ไม่ว่างเปล่า | ไฟล์มีขยายที่ไม่เป็นมาตรฐาน | ส่วนเหล่านี้ถูกรักษาไว้โดยตรง โดยไม่ใช่อาหารถ้ามันมีตัวตนในการบรรทุก |
Custom IPackageReader ไม่เรียก | ส่งไปยังการใช้งานที่ผิดของคอนสตรั๊กเตอร์ | การรับรองการ LoadOptions หรือการใช้งานโครงสร้างที่รับรองความอ่อนแอของตัวอ่านแบบพิเศษ |
FAQ
ผมจําเป็นต้องใช้ IPackageReader/IPackerWriter สําหรับงานตารางกระดาษปกติหรือไม่?
ไม่.อินเตอร์เฟสเหล่านี้เป็นจุดขยายสําหรับฉากที่พัฒนา ทุกการทํางานอ่าน / เขียนมาตรฐานผ่าน Workbook โดยตรง.
ส่วนที่ไม่สนับสนุนถูกรักษาไว้ใน Save ไหม?
ส่วนที่ระบุใน PackageModel.UnsupportedParts ไม่ผ่านการประมวลผลและอาจไม่ได้ถูกเขียนกลับ หากความซื่อสัตย์ในการเดินทางไป-กลับไปสําหรับชิ้นส่วนที่ไม่ใช่มาตรฐาน ใช้ขั้นตอนหลังการแปรรูปแบบระดับ Zip.
ความแตกต่างระหว่าง PackageStructureException และ WorkbookLoadExcept คืออะไร?
PackageStructureException แสดงถึงความผิดพลาดในระดับ OPC/ZIP (ประเภทเนื้อหาที่ขาด, ความสัมพันธ์แตก). WorkbookLoadException แสดงถึงความผิดพลาดในการพาร์สหรือการแสดงคําในระดับสูงกว่า ในเนื้อหา XLSX.
คําอธิบายการพบบ่อย API
| คลาส / อินเตอร์เฟซ | Description |
|---|---|
IPackageReader | อินเตอร์เฟสสําหรับการอ่านแพ็คเกจ OPC (Read วิธีการ) |
IPackageWriter | อินเตอร์เฟสสําหรับการเขียนแพ็คเกจ OPC (Write วิธีการ) |
PackageLoadContext | การผูกพัน a Workbook ลงใน PackageModel |
PackageLoadContext.Package | กลับตัวเลข PackageModel |
PackageModel.Parts | ส่วนของสารทั้งหมดในแพ็คเกจ |
PackageModel.Relationships | การเข้าประวัติความสัมพันธ์ของ OPC |
PackageModel.UnsupportedParts | ส่วนที่ไม่ได้รับการประมวลผลโดยห้องสมุด |
PackagePartDescriptor.PartUri | URI ของ OPC สําหรับชิ้นส่วน |
PackagePartDescriptor.ContentType | ประเภทของ MIME ของส่วน |
PackagePartDescriptor.Category | ประเภททางลักษณะ (ตารางงาน, สไตล์ ฯลฯ) |
PackageStructureException | โดนการละเมิดโครงสร้างของ OPC |