วิธีการทํางานกับ OOXML Packaging ใน .NET

วิธีการทํางานกับ OOXML Packaging ใน .NET

ไฟล์ XLSX เป็นอาร์คิเวอร์ ZIP ของ Open Packaging Convention (OPC) Aspose.Cells FOSS สําหรับ .NET เปิดเผยโครงสร้างแพ็คเกจที่อยู่เบื้องหลังผ่านการใช้งานของ OPC. PackageModel, PackagePartDescriptor, IPackageReader,และ IPackageWriter. เหล่านี้เป็น APIs ระดับโครงสร้างที่ใช้ได้อย่างสําคัญสําหรับการวินิจฉัยและการนําไปปฏิบัติงานในการเก็บข้อมูลตามความต้องการ. ติดตั้งด้วย dotnet add package Aspose.Cells_FOSS.

คู่มือขั้นตอนตามขั้นตอนนี้

ขั้นตอนที่ 1: ติดตั้งแพคเกจ

dotnet add package Aspose.Cells_FOSS

ขั้นตอนที่ 2: นําเข้า Namespace

using Aspose.Cells_FOSS;

ขั้นตอน 3: จัดการ PackageStructureException

PackageStructureException จะถูกโยนเมื่อ XLSX package มีโครงสร้าง 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 และ IPackeWriter

IPackageReader กําหนด a Read() วิธีการอ่าน OPC แพ็คเกจ; IPackageWriter กําหนด a Write() วิธีการเขียนหนึ่ง. ห้องสมุดให้บริการ ZIP-backed implementations โดยปกติ การนําไปใช้งานที่กําหนดได้ สามารถจัดหาเมื่อโหลดจากหรือบันทึกในระบบเก็บข้อมูลนอกของไฟล์ (เช่น cloud blobs หรือ in-memory buffers).

// 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 รายการส่วนที่ห้องสมุดไม่ประมวลผล. เหล่านี้ถูกรักษา แต่ไม่ได้ตีความ Access 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 แต่บางส่วนของเนื้อหาที่ขาดไป. Check LoadDiagnostics.Issues สําหรับ DataLossRisk = true ข้อความที่แสดงให้เห็นถึงชิ้นส่วน ที่ตกในระหว่างการซ่อมแซม.

Custom IPackageReader ไม่ถูกเรียกมาเลย. การรับประกันการใช้งานโครงสร้างที่ยอมรับ Reader ที่กําหนดเอง. ไม่ใช่ทั้งหมด Workbook การบรรจุขยายตัวของคอนสตรัคเตอร์ยอมรับการอ่านแพ็คเกจที่กําหนดเอง.

คําถามที่พบบ่อย

เมื่อไหร่ที่ผมควรนํา IPackageReader หรือ IP ackagewriter มาใช้?

เพียงแค่เมื่อ Backend ของคุณไม่เป็นระบบไฟล์ท้องถิ่น เช่น การโหลดตรงจากคลาวสเตอรี่โดยไม่ต้องสร้างไฟลานชั่วคราว.

ส่วนที่ไม่ได้รับการสนับสนุนใน PackageModel ถูกรักษาไว้ในการบันทึก?

ส่วนที่ไม่เป็นมาตรฐานใน UnsupportedParts ไม่รับประกันว่าจะเขียนกลับ เพื่อความซื่อสัตย์ในการเดินทางไป-กลับไปของชิ้นส่วนที่ไม่ใช่มาตรฐาน, การทําการต่อ XLSX ที่บันทึกไว้ในระดับ ZIP.

ความแตกต่างระหว่าง PackageStructureException และ WorkbookLoadExcept คืออะไร?

PackageStructureException เป็นความผิดพลาดในระดับ OPC/ZIP (ประเภทเนื้อหาที่ขาด, ความสัมพันธ์แตก). WorkbookLoadException เป็นความล้มเหลวระดับสูงในการพารัสเนื้อหา XLSX XML.

See Also

 ภาษาไทย